Django 1.7如何在注释后访问值

时间:2015-01-21 07:37:07

标签: python django django-1.7

我正在使用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'))

1 个答案:

答案 0 :(得分:0)

好像你改变了messages"在这里做了什么"代码或第一次迭代后。