我有以下型号:
class Model(...):
date = DateField()
user = ForeignKey()
data = ForeignKey()
time = IntegerField()
我想为每个用户提供单个数据的时间总和字段,所以我这样做:
Model.objects.filter(date=..., data=...).values('user_id').annotate(time=Sum('time'))
但我收到的结果如下:
[{'user_id':1,'time':20},{'user_id':1,'time':10},{'user_id':2,'time':20}]
所以分组不起作用。我检查了django生成的查询,我不知道为什么django也使用日期和数据进行分组,而不仅仅是用户。我做错了什么或者这只是SQLite问题?
答案 0 :(得分:5)
您应该将.order_by()
附加到您的查询集中,以清除默认的模型排序。
代码:
(Model.objects.filter(date=…, data=…)
.values('user_id')
.annotate(time=Sum('time'))
.order_by()) # <---- Here
default ordering doc warning中已完整解释了这一点:
“除了它不会很有效。按名称的默认排序将 也参与分组...你应该...清除查询中的任何顺序。“