我有一個Django模型,我想顯示一些統計數據。例如。我有一個類似於顏色的字段,我想顯示多少條目的顏色設置爲「紅色」,「綠色」等。Django保持統計最新
由於我在表格中有很多行和幾種顏色,不想計算每次讀取的每個統計量的總和。
因此,我試圖拿出第二個表,其中包含計算的總和。但是現在我必須保持這個信息與原始表同步。例如。無論何時添加,刪除或修改條目,我都必須更新統計表。
我該怎麼做這樣的事情?
我有一個Django模型,我想顯示一些統計數據。例如。我有一個類似於顏色的字段,我想顯示多少條目的顏色設置爲「紅色」,「綠色」等。Django保持統計最新
由於我在表格中有很多行和幾種顏色,不想計算每次讀取的每個統計量的總和。
因此,我試圖拿出第二個表,其中包含計算的總和。但是現在我必須保持這個信息與原始表同步。例如。無論何時添加,刪除或修改條目,我都必須更新統計表。
我該怎麼做這樣的事情?
取決於您的行數,但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操作
您可以使用Django Signals進行此操作。具體來看,post_save
和post_delete
。 http://docs.djangoproject.com/en/dev/ref/signals/
您好,感謝了很多,我使用自定義後保存和刪除處理程序使用你的方法。我對數據庫一致性感到有點緊張。因此,我不會用+1更新任何計數值,而是會在每次更改時重新計數。否則,我還必須在更新期間遞減和遞增(例如,在pre_save,遞減和post_save遞增時)。 – Fabian 2011-03-28 14:24:18