在SO上有很多类似的问题,但是这个特定的错误消息没有出现在我的任何搜索中:
AttributeError: 'WhereNode' object has no attribute 'select_format'
这是在尝试使用比较的(布尔)结果annotate()
Django查询集时引发的,例如下面简化示例中的gt查找:
Score.objects.annotate(positive=Q(value__gt=0))
模型如下所示:
class Score(models.Model):
value = models.FloatField()
...
如何解决这个问题?
2条答案
按热度按时间bf1o4zei1#
可以使用ExpressionWrapper()修复这种情况
来自文档:
在不同类型的
F()
表达式上使用算术时,ExpressionWrapper
是必需的...这显然也适用于
Q
对象,尽管我在文档中找不到任何显式引用。vecaoik12#
如果您尝试过滤计数注解,并且意外地将filter子句放在了错误的位置,也会收到此错误消息。例如,如果您遵循this example,而不是写入
就像这个例子说的你不小心写了
那么你会得到这个错误信息。这是一个愚蠢的错误,但是可能会花费你一两个小时,而且
ExpressionWrapper
也帮不上忙。(希望这能帮助其他人。)