gpt4 book ai didi

python - Django related_table() 与 extra()

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:04 24 4
gpt4 key购买 nike

我正在尝试将 .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 .

关于python - Django related_table() 与 extra(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com