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 一个新的。因此,您的 annotate
和 ops
调用实际上并没有做任何事情,因为它们创建了一个新的查询集,然后立即将其丢弃。
您需要重新分配调用结果:
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')
您好,我正在尝试使用 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 一个新的。因此,您的 annotate
和 ops
调用实际上并没有做任何事情,因为它们创建了一个新的查询集,然后立即将其丢弃。
您需要重新分配调用结果:
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')