Django-带注释子句中的相等性检查 [英] Django - an equality check in annotate-clause
本文介绍了Django-带注释子句中的相等性检查的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的Django 1.9项目中,我试图输出如下内容:
In my Django 1.9 project I am trying to output something like this:
return MyModel.objects.values(...).\
annotate(flg = ExpressionWrapper(F('rgt') - F('lft') > 0,
output_field = BooleanField()))
这将产生 AttributeError:'bool'对象没有属性'resolve_expression'
错误
我尝试使用 Case-when
语法重写它:
I try to rewrite it using Case-when
syntax:
return MyModel.objects.values(...)\
.annotate(flg = Case(When(F('rgt') - F('lft') > 0, then = True,
output_field = BooleanField())))
这次,我以 TypeError结尾:__init __()接受Q对象或查找作为关键字参数
错误。我迷路了。有任何想法吗?
This time, I end up with TypeError: __init__() takes either a Q object or lookups as keyword arguments
error. I am lost. Any ideas ?
推荐答案
尝试:
return MyModel.objects.values(...).\
annotate(flg=ExpressionWrapper(Q(rgt=F('lft')),
output_field=BooleanField()))
功能要求使其更容易: https://code.djangoproject.com/ticket/27021
Feature request to make it easier: https://code.djangoproject.com/ticket/27021
这篇关于Django-带注释子句中的相等性检查的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文