Как мне передать список Qs для фильтрации или поиска?
-
21-08-2019 - |
Вопрос
Как мне передать список Qs для фильтрации или поиска?Что - то вроде:
q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?
Без списка я бы обошелся:
Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
Решение
Используйте функцию reduce() в python:
import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)
Другие советы
Q объекты также имеют add
метод, который принимает другой Q-объект и Q-соединитель (либо И, либо ИЛИ).
q_object = Q(xyz__isnull=True)
q_object.add(Q(x__startswith='x'), Q.OR)
Я обнаружил, что это полезно при создании фильтров OR, и я написал более длинный пример в своем блоге: "Добавление" Q объектов в Django
Не связан с StackOverflow