在SQLite中注释

时间:2012-12-11 08:09:05

标签: django sqlite django-models

我有以下型号:

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

1 个答案:

答案 0 :(得分:5)

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

代码:

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

default ordering doc warning中已完整解释了这一点:

  

“除了它不会很有效。按名称的默认排序将   也参与分组...你应该...清除查询中的任何顺序。“