我正在使用Django 1.7并尝试进行聚合查询。他们查询似乎一直有效,直到我遍历ValueSet。
>> messages = Message.objects.filter(is_outgoing=False)
.values('contact_id').annotate(Max('created')
>> messages.count()
5
这是对的。只有5个独特的联系人。
然而,一旦我这样做了:
for m in messages:
do stuff here
现在,当我执行messages.count()时,我得到49,这是未按客户端分组的消息总数。
如何迭代ValueSet并仅获取5条最新消息?
编辑:
我发现了发生了什么。我将Meta.ordering设置为' -created'在Message类中。这意味着ORM在创建时添加了一个组,因此生成的查询是通过“创建”和“创建”进行分组的。和' contact_id'。
我在annotate()之前添加了order_by()来删除默认排序,它解决了问题。
messages = Message.objects.filter(is_outgoing=False)
.values('contact_id').order_by().annotate(Max('created'))
答案 0 :(得分:0)
好像你改变了messages
"在这里做了什么"代码或第一次迭代后。