我正在尝试使用带有.related_table()的.extra()函数:
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()
时,我一直收到“字段列表'中的”未知列'bar.is_ok',
查看生成的查询(生成的实际查询,而不是foo.query),它不会
似乎加入了这两个,关于我如何做的任何想法?
答案 0 :(得分:3)
以下查询应该有效,但我无法真正测试它......
foo_objects = Foo.objects.select_related('bar').extra(select={'is_ok':'IF(bar.is_ok,"Yes","No")'})
只要它们位于同一个查询集中,您执行select_related()
和extra()
的顺序无关紧要。
<强>更新强>
如果您需要使用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()
...或者如果你不需要“是”和“否”,你可以使用......
foo_objects = Foo.objects.values('bar__is_ok')
...会强制加入。
另见Django门票#3358。