2

私は .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 があります)が、
呼び出し時に「「フィールド リスト」に「不明な列 'bar.is_ok'」というメッセージが表示され続け ます。クエリ)、2つを結合していない ようです。どうすればいいですか?result.values()

4

1 に答える 1

3

次のクエリは機能するはずですが、実際にテストすることはできません...

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

どちらも同じクエリセット上にある限り、どちらの順序でselect_related()andを実行してもかまいません。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も参照してください。

于 2013-06-13T19:29:55.217 に答える