2012-04-29 51 views
0

代碼:註釋然後過濾,然後標註

now = datetime.now() 
year_ago = now - timedelta(days=365) 
category_list = Category.objects.annotate(suma = Sum('operation__value')) \ 
           .filter(operation__date__gte = year_ago) \ 
           .annotate(podsuma = Sum('operation__value')) 

的想法:每個類別和金額一年的總和回來。

但是這段代碼只導致過濾對象; suma等於podsuma

回答

1

一個查詢集只會產生一個查詢,所以所有的註釋都是通過相同的過濾數據集來計算的。你需要做兩個查詢。

更新:

做這樣的事情:

在models.py

class Category(models.Model): 
    ... 
    def suma(self): 
     return ... 
    def podsuma(self): 
     return ... 

然後取出註解和你的循環將正常運行是。這意味着更多的查詢,但它們會更簡單,並且可以隨時緩存它們。

+0

好的 - 那麼如何解決這個問題呢?我需要它在一個查詢集 - 模板中有{for循環} –

+0

我會在Category類上編寫方法 - 我已經用示例更新了答案。 – Greg

+0

http://stackoverflow.com/questions/10380392/how-to-add-property-attribute-to-queryset-like-annotation有完整的解決方案 - 但感謝您解釋主要問題 - –

相關問題