Django 注释引发 AttributeError 'object has no attribute'

Django annotate raising AttributeError 'object has no attribute'

您好,我正在尝试使用 django 的注释,我认为我做的一切都很好,但我一定是遗漏了一些东西,因为我遇到了属性错误

这是我的模型

class Operation(models.Model):
    ...

class Message(models.Model):
    operation = models.ForeignKey(Operation)
    sent_on = models.DateTimeField(auto_now_add=True)
    ...

这就是我要做的事情:

    ops = Operation.objects.filter(...)
    ops.annotate(last_message=Max('message__sent_on'))
    ops.order_by('-last_message')

    print ops[0].last_message

我得到

AttributeError at ...
'Operation' object has no attribute 'last_message'

请注意,如果我将注释更改为 ops.annotate(last_message=Max('whatever')),我会得到一个 FieldError,所以之前的语法是正确的...但是为什么我不能访问 last_message字段?

我正在使用 django 1.6.10

谢谢!

查询集方法不会修改现有的查询集,它们 return 一个新的。因此,您的 annotateops 调用实际上并没有做任何事情,因为它们创建了一个新的查询集,然后立即将其丢弃。

您需要重新分配调用结果:

ops = Operation.objects.filter(...)
ops = ops.annotate(last_message=Max('message__sent_on'))
ops = ops.order_by('-last_message')

或者一次性完成:

ops = Operation.objects.filter(
    ...
).annotate(
    last_message=Max('message__sent_on')
).order_by('-last_message')