注释然后过滤然后注释

时间:2012-04-29 22:48:56

标签: django annotations

代码:

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 个答案:

答案 0 :(得分:1)

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

<强>更新

做这样的事情:

在models.py

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

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