2

我正在尝试将 .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),
但是我在调​​用时不断收到“'字段列表'中的未知列'bar.is_ok'” result.values()
查看生成的查询(生成的实际查询,而不是 foo.查询),它似乎没有
加入两者,关于我如何做到这一点的任何想法?

4

1 回答 1

3

以下查询应该可以工作,但我无法真正测试它......

foo_objects = Foo.objects.select_related('bar').extra(select={'is_ok':'IF(bar.is_ok,"Yes","No")'})

只要它们都在同一个查询集上,select_related()你执行的顺序并不重要。extra()


更新

如果您需要它与 a 一起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

于 2013-06-13T19:29:55.217 回答