我正在尝试将 .extra() 函数与 .related_table() 一起使用:
foo_objects = Foo.objects.all()
result = foo.extra(select={'is_ok':'IF(bar.is_ok,"Yes","No")'}).select_related('bar')
Foo 和 Bar 与模型和所有内容相连(Foo 具有 bar_id),
但在调用 result.values()
时,我不断收到“'field list' 中的未知列'bar.is_ok'”,
查看生成的查询(生成的实际查询,而不是 foo.query),它不会
似乎加入了两者,关于我如何做到这一点有什么想法吗?
下面的查询应该可以工作,但我无法真正测试它...
foo_objects = Foo.objects.select_related('bar').extra(select={'is_ok':'IF(bar.is_ok,"Yes","No")'})
执行 select_related()
的顺序并不重要和 extra()
in,只要它们都在同一个查询集上。
更新
如果您需要它来处理 ValuesQuerySet
, 你不能使用 select_related()
, 所以你必须稍微不同地做,通过对 extra()
使用额外的参数...
foo_objects = Foo.objects.extra(tables=('bar',),
where=('foo.bar_id=bar.id',),
select={'is_ok':'IF(bar.is_ok,"Yes","No")'}).values()
...或者如果您不需要返回"is"和“否”,您可以使用...
foo_objects = Foo.objects.values('bar__is_ok')
...这将强制加入。
另见 Django 票证 #3358 .
我是一名优秀的程序员,十分优秀!