6

最初の例:

# ANDing Q objects
q_object = Q()
q_object.add(Q(), Q.AND)

# ORing Q objects
q_object = Q()
q_object.add(Q(), Q.OR)

2番目の例:

>>> import operator
# create a list of Q objects
>>> mylist = [Q(question__contains='dinner'), Q(question__contains='meal')]
# OR
>>> Poll.objects.filter(reduce(operator.or_, mylist))
[<Poll: what shall I make for dinner>, <Poll: what is your favourite meal?>]
# AND
>>> Poll.objects.filter(reduce(operator.and_, mylist))
[]

この手法は、eBayのように、条件付きフィルターを使用してページのクエリを作成する場合に非常に役立つ場合があります。

しかし、私が知っているように、これは文書化されていないので、この問題にはどのようなベストプラクティスがあり、サポートから除外されることはなく、私のコードを読む人を混乱させることはありませんか?

ps
そしてまた-Q()オブジェクトで「&」演算子を使用するのは良い解決策ですか?Django-docsで、私はそれについて何も見つかりませんでした!

4

2 に答える 2

8

ドキュメント
を確認して&くださいoperator.and_'AND'

>>> mylist = [Q(question__contains='dinner'), Q(question__contains='meal')]
# AND
>>> Poll.objects.filter(reduce(operator.and_, mylist))
# could be 
>>> Poll.objects.filter(*mylist)
于 2013-02-19T13:05:29.283 に答える
0

Q の使用法は文書化された機能であり、パブリック Django API です。つまり、安定しており、Django の後方互換性ポリシーに従ってなくなることはありません。

https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

于 2013-02-19T13:06:47.460 に答える