我有一个Django模型,我想展示一些关于它的统计数据。例如。我有一个像颜色的字段,我想显示有多少条目的颜色设置为“红色”,“绿色”等。
由于表格中有很多行和几种颜色,我不想计算每次读取时每个统计数据的总和。
因此,我试图想出第二张表,其中包含计算得出的金额。但现在我必须保持这些信息与原始表同步。例如。无论何时添加,删除或修改条目,我都必须更新统计表。
我该怎么做?
答案 0 :(得分:3)
根据您的行数而select count(id) ... GROUP BY
通常很快。
否则,Django signals是一个非常有趣的概念。您可以“收听”某些事件,例如模型保存/删除...或使用您的自定义信号。
在您的情况下,您希望收听模型post_save
和post_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_save
和post_delete
。 http://docs.djangoproject.com/en/dev/ref/signals/