代码:
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
。
答案 0 :(得分:1)
查询集只生成一个查询,因此所有注释都是在同一过滤数据集上计算的。你需要做两个查询。
<强>更新强>
做这样的事情:
在models.py
中class Category(models.Model):
...
def suma(self):
return ...
def podsuma(self):
return ...
然后删除注释,你的for循环应该按原样运行。它意味着更多的查询,但它们会更简单,你可以随时缓存它们。