2011-03-28 44 views
1

我有一個Django模型,我想顯示一些統計數據。例如。我有一個類似於顏色的字段,我想顯示多少條目的顏色設置爲「紅色」,「綠色」等。Django保持統計最新

由於我在表格中有很多行和幾種顏色,不想計算每次讀取的每個統計量的總和。

因此,我試圖拿出第二個表,其中包含計算的總和。但是現在我必須保持這個信息與原始表同步。例如。無論何時添加,刪除或修改條目,我都必須更新統計表。

我該怎麼做這樣的事情?

回答

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操作

+0

您好,感謝了很多,我使用自定義後保存和刪除處理程序使用你的方法。我對數據庫一致性感到有點緊張。因此,我不會用+1更新任何計數值,而是會在每次更改時重新計數。否則,我還必須在更新期間遞減和遞增(例如,在pre_save,遞減和post_save遞增時)。 – Fabian 2011-03-28 14:24:18