Django保持最新的统计数据

时间:2011-03-28 08:40:14

标签: database django

我有一个Django模型,我想展示一些关于它的统计数据。例如。我有一个像颜色的字段,我想显示有多少条目的颜色设置为“红色”,“绿色”等。

由于表格中有很多行和几种颜色,我不想计算每次读取时每个统计数据的总和。

因此,我试图想出第二张表,其中包含计算得出的金额。但现在我必须保持这些信息与原始表同步。例如。无论何时添加,删除或修改条目,我都必须更新统计表。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

根据您的行数而select count(id) ... GROUP BY通常很快。

否则,Django signals是一个非常有趣的概念。您可以“收听”某些事件,例如模型保存/删除...或使用您的自定义信号。

在您的情况下,您希望收听模型post_savepost_delete信号。

以下是一个例子:

from django.db.models import signals
import models

def itemSaved(sender, **kwargs):
    obj = kwargs['instance']
    colorMod =  models.Color.get(name = obj.color)
    colorMod.count = colorMod.count + 1
    colorMod.save()

# listen to post_save event for model MyModel
signals.post_save.connect(itemSaved, sender=models.MyModel)

将此代码放在models.py

希望这有帮助。

编辑:另请参阅此new F operator technique example了解单个SQL操作

答案 1 :(得分:1)

您可以使用Django Signals。具体来说,请查看post_savepost_deletehttp://docs.djangoproject.com/en/dev/ref/signals/