我正在使用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字段吗?
显然,如果它只是作为变量存储在内存中,那么当你重新启动时总数会重置;你还期待什么?
它在像Django这样的环境中更没有意义,它通常由不共享全局数据的多个进程提供服务。
但这样做没有意义。硬币存储在数据库中,因此要获得总数,您应该要求数据库执行Sum查询:
from django.db.models import Sum
Coin.objects.aggregate(total=Sum('coin_count'))