Django模型文件中的静态变量和方法,以及如何在Django管理界面中为静态变量添加十进制字段

问题描述 投票:0回答:1

我正在使用Django创建一个网页,计算收集的硬币。每枚硬币都有coin_type和coin_count。我还想要一个静态总变量“total”来计算硬币总量。我想创建一个函数,可以计算所有实例的coin_count的总和,并将该值分配给total。但是,当我在类中声明“total”时,它的值对于每个实例都是不同的。此外,我不知道如何在Django管理界面中为静态变量设置十进制字段。

在下面的代码中,我创建了一个全局变量“total”,以便它的值不会因每个类实例而改变。但是,每次更改代码或重新启动服务器时,其值都将重置为0。

这是我的models.py文件

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
total = 0

class Coin(models.Model):
    coin_type = models.CharField(max_length=100)
    coin_count = models.DecimalField(max_digits=3,decimal_places=0)

    def __str__(self):
        return self.coin_type

    def count(self):
        return self.coin_count

    def increase(self):
        self.coin_count += 1

    @staticmethod
    def find_total():
        global total
        return total

我希望有一个静态变量“total”,它对所有实例都有相同的值,静态方法“calculate_total”计算所有实例“coin_count”的总和。如果可能的话,任何人都可以帮我在Django管理界面中为“total”创建一个Decimal字段吗?

python django django-admin global-variables class-variables
1个回答
0
投票

显然,如果它只是作为变量存储在内存中,那么当你重新启动时总数会重置;你还期待什么?

它在像Django这样的环境中更没有意义,它通常由不共享全局数据的多个进程提供服务。

但这样做没有意义。硬币存储在数据库中,因此要获得总数,您应该要求数据库执行Sum查询:

from django.db.models import Sum
Coin.objects.aggregate(total=Sum('coin_count'))
© www.soinside.com 2019 - 2024. All rights reserved.