Django related_table()与extra()

时间:2013-06-13 19:18:56

标签: python django django-queryset

我正在尝试使用带有.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),它不会 似乎加入了这两个,关于我如何做的任何想法?

1 个答案:

答案 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