在SQLite中注释

sza*_*man 0 sqlite django django-models

我有以下型号:

class Model(...):
  date = DateField()
  user = ForeignKey()
  data = ForeignKey()
  time = IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想为每个用户提供单个数据的时间总和字段,所以我这样做:

Model.objects.filter(date=..., data=...).values('user_id').annotate(time=Sum('time'))
Run Code Online (Sandbox Code Playgroud)

但我收到的结果如下:

[{'user_id':1,'时间':20},{'user_id':1,'时间':10},{'user_id':2,'时间':20}]

所以分组不起作用.我检查了django生成的查询,我不知道为什么django也使用日期和数据进行分组,而不仅仅是用户.我做错了什么或者这只是SQLite问题?

dan*_*era 5

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

对于你的代码:

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

这在默认订购文档警告中已完整解释:

"除了它不会很有效.按名称的默认排序也将在分组中起作用......你应该...清除查询中的任何排序."