如何修复Django annotate()引发的AttributeError:“WhereNode”对象没有属性“select_format”?

2024-10-03 13:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

有许多类似的问题,但在我的任何搜索中都没有出现此特定的错误消息:

AttributeError: 'WhereNode' object has no attribute 'select_format'

这是在尝试使用比较的(布尔)结果annotate()Django queryset时提出的,例如以下简化示例中的gt lookup

Score.objects.annotate(positive=Q(value__gt=0))

模型如下所示:

class Score(models.Model):
    value = models.FloatField()
    ...

如何解决这个问题


Tags: nogtformat消息objectvaluemodels错误
1条回答
网友
1楼 · 发布于 2024-10-03 13:24:20

可以使用ExpressionWrapper()来修复这种情况

Score.objects.annotate(
    positive=ExpressionWrapper(Q(value__gt=0), output_field=BooleanField()))

从文档中:

ExpressionWrapper is necessary when using arithmetic on F() expressions with different types ...

显然Q对象也是如此,尽管我在docs中找不到任何显式引用

相关问题 更多 >