DJWOMS1
@DJWOMS1
Веб-программист

Как организовать поиск с несколькими параметрами в django?

Добрый день. Подскажите идею как организовать поиск с несколькими параметрами.
Поиск работает на ajax. Всего 7 полей для поиска. Нужно учитывать все варианты в каком порядке пользователь может начать поиск.
К примеру, обзову поля по номеру, поля 1 и 2; 1 и 2 и 3; 4 и 7; 7 и 4 и 1
Логика в чем, был вариант на каждое поле вешать событие и отправлять данные, во вью уже проверять какие есть и делать запросы в базу. Но с учетом того что пользователь может выбрать в любом порядке поля, было решено сделать для всех полей одно событие и отправлять все данные со всех полей, а потом уже на сервере проверять какие пустые какие пришли с данными. Вот тут и нужен совет, если есть 7 полей, то вариантов какие данные придут пустые, а какие нет, много.
И обычной проверкой if, получиться очень много кода.
Вопрос, есть ли вариант как сделать запрос в базу даже если переменная будет пуста, т.е. пришли данные с пустым полем, или как сделать так проверку, что бы не писать все варианты которые возможны.
К примеру:
var1 = request.GET.get('var1', None)
var2 = request.GET.get('var2', None)
var3 = request.GET.get('var3', None)
if var1 and var2 and var3:
    snippets = Model.objects.filter(pole1=var1, pole2=var2, pole3=var3)
elif var1 and var2 and not var3:
    snippets = Model.objects.filter(pole1=var1, pole2=var2)
elif var1 and not var2 and not var3:
    snippets = Model.objects.filter(pole1=var1)

И так далее, как избежать такого варианта?
  • Вопрос задан
  • 420 просмотров
Пригласить эксперта
Ответы на вопрос 1
Astrohas
@Astrohas
Python/Django Developer
filters = {
  "pole1": znach1;
  "pole2":znach2
}
for key in filters.keys():
   if not filters[key]:
      filters.pop(key)
snippets = Model.objects.filter(**filters)

как то так. Конечно можно написать короче и проще но... лень
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы