Как мне передать список Qs для фильтрации или поиска?

StackOverflow https://stackoverflow.com/questions/664345

Вопрос

Как мне передать список 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top