First example:Динамически создавать сложные запросы с Q() в Django
# ANDing Q objects
q_object = Q()
q_object.add(Q(), Q.AND)
# ORing Q objects
q_object = Q()
q_object.add(Q(), Q.OR)
>>> 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-документах я ничего не нашел об этом!
Я имел в виду не использования Q() в общем, но использование его в таких специфических формах –
не видит, что особенный в вашем использовании Q. Вы просто используете свой публичный интерфейс. – mderk
В документах я ничего не вижу о «&» операторе и динамическом построении запроса Q(). –