2012-04-29 11 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')) 

アイデア:バック1年の各カテゴリと和の合計を取得します。

しかし、このコードの結果はフィルタリングされたオブジェクトのみです。 sumapodsumaに等しい。

答えて

1

クエリーセットは1つのクエリーしか生成しないので、すべてのアノテーションは同じフィルターされたデータセットで計算されます。 2つのクエリを実行する必要があります。

更新:

このような何か:

models.py

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

に続いてループするための注釈を削除し、あなたがあるとして動作するはずです。それはもっと多くのクエリを意味しますが、よりシンプルになり、いつでもキャッシュすることができます。

+0

これで問題を解決する方法は?私は1つのクエリーセットでそれを必要としています - テンプレートに{forループ}があります –

+0

私はCategoryクラスのメソッドを記述します - 私は例を使って答えを更新しました。 – Greg

+0

http://stackoverflow.com/questions/10380392/how-to-add-property-attribute-to-queryset-like-annotation完全な解決策がありますが、主な問題点を説明してくれてありがとうございます。 –

関連する問題