0

我有以下模型:

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 问题?

4

1 回答 1

5

您应该附加.order_by()到您的查询集以清除默认模型排序。

对于您的代码:

(Model.objects.filter(date=…, data=…)
              .values('user_id')
              .annotate(time=Sum('time'))
              .order_by())                        # <---- Here

这在默认订购文档警告中有完整说明:

“除非它不太有效。默认的名称排序也将在分组中发挥作用……你应该……清除查询中的任何排序。”

于 2012-12-11T08:18:13.123 回答