0

たとえば、2つのクエリセットがあります。

q1=MyModel.objects.filter(visible=True)
q2=MyModel.objects.filter(published=True)

そして、q1とq2のすべてのオブジェクトを含む単一のクエリセットまたはリストを作成する必要があります。

私はこれを次のように行っていました:

q=list(chain(q1,q2))
#q= q1 | q2 #this gives me not all objects from q2 or q1,so i don't use bitwise or

しかし、それはlist()データベースへの追加のクエリを生成すると言われていました。それは本当ですか?もしそうなら、誰かがマージを行うための最も最適化された方法を指定できますか?

4

2 に答える 2

1

これを試すことができます:

q1_pks = MyModel.objects.filter(visible=True).values_list('pk', flat=True)
q2_pks = MyModel.objects.filter(published=True).values_list('pk', flat=True)

final_query = MyModel.objects.filter(pk__in=list(q1_pks).extend(list(q2_pks)))

list(qX_pks)パフォーマンスの問題が発生するかどうかはわかりませんが、これでうまくいくはずです。

于 2013-03-10T02:10:16.943 に答える
1
q1=MyModel.objects.filter(visible=True)
q2=MyModel.objects.filter(published=True)
qs12 = QuerySetSequence(qs1, qs2)

上記のコードを次のスニペットと組み合わせます: http://djangosnippets.org/snippets/1933/

于 2013-03-07T14:27:06.790 に答える