Как реализовать поиск (фильтрацию) с множеством параметров в Django?
В модели есть несколько полей. Как можно реализовать поиск (фильтрацию) данных на сайте с произвольным набором фильтров? Например, в модели есть поля: поле_1, поле_2, поле_3. Пользователь, используя поисковую форму на сайте, заполняет поле_1 и поле_3, а поле_2 остается не заполненным. Каждое поле формы соответствует одному полю в модели. Т.к. одно из полей не заполнено, то использовать конструкцию model.objects.filter(filter_1, filter_2, filter_3)
не получается.
Каждый фильтр должен дополнять остальные, т.е. работать по принципу AND, но правильно обрабатывать не заполненные поля.
Ввиду неопытности, в голову приходит вариант использования if...else, но такой подход считаю не рациональным, т.к. с каждым добавленным полем код будет очень разрастаться и вероятность ошибок сильно возрастает.
Наверняка в такой сложной и продуманной системе как Django уже что-то придумано для по сути стандартной задачи. Гуглю уже два дня, но ничего толкового найти не могу.
Благодаря наводке Dr. Bacon решил свой вопрос следующим образом:
def get_queryset(self):
if not self.request.GET:
return Order.objects.all() # если нет параметров, просто возвращаем все посты
filters = Q() # создаем первый объект Q, что бы складывать с ним другие
for key in ['order_type', 'technologies']: # в списке названия полей модели для которых осуществляем поиск
value = self.request.GET.get(key)
if value:
filters &= Q(**{f'{key}__icontains': value})
return Order.objects.filter(filters)