Django-带注释子句中的相等性检查 [英] Django - an equality check in annotate-clause

查看:74
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆