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 年前の合計を取得します。

ただし、このコードはフィルタリングされたオブジェクトのみを生成します。sumaに等しいpodsumaです。

4

1 に答える 1

1

クエリセットは 1 つのクエリのみを生成するため、すべての注釈はフィルター処理された同じデータ セットに対して計算されます。2 つのクエリを実行する必要があります。

アップデート:

次のようにします。

models.py で

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

次に、注釈を削除すると、 for ループがそのまま機能するはずです。より多くのクエリを意味しますが、クエリはよりシンプルになり、いつでもキャッシュできます。

于 2012-04-30T02:23:50.740 に答える