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

4

1 回答 1

1

一个查询集只产生一个查询,因此所有注释都是在同一个过滤数据集上计算的。您需要执行两个查询。

更新:

做这样的事情:

在模型.py

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

然后删除注释,您的 for 循环应该按原样工作。这将意味着更多的查询,但它们会更简单,您可以随时缓存它们。

于 2012-04-30T02:23:50.740 回答