Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Django генерация фильра модели

Есть фильтр по полям модели:
queryset = queryset.filter( Q(title__icontains=search_text) | Q(description__icontains=search_text) | Q(name_icontains=search_text) )
Подскажите, как сделать, чтобы блок
Q(title__icontains=search_text) | Q(description__icontains=search_text)| Q(name_icontains=search_text)
Генерировался в зависимости от обстоятельств?
Например, в одном случае нужно, чтобы фильтр был такой:
Q(description__icontains=search_text) | Q(name_icontains=search_text)
В другом такой:
Q(title__icontains=search_text) | Q(description__icontains=search_text) |
Или даже такой:
Q(title__icontains=search_text)
Объекты Q я бы мог сгенерировать при помощи словаря, Например:
search_text = 'somthing text' fields_name = ['title', 'description', 'name']
queries = [ Q(**{field+'__icontains': search_text}) for field in fields_name]
Но как потом это:
[, , ]
Через OR засунуть в filter - не могу никак разобраться. Прошу помощи.


Ответ

query = Q() for q in queries: query |= q
или
import operator query = reduce(operator.or_, queries)

Комментариев нет:

Отправить комментарий