Django: как использовать фильтр переменных ключей с __range - PullRequest
0 голосов
/ 22 марта 2019
date_one = form.cleaned_data.get('date_one')
date_two = form.cleaned_data.get('date_two')
date_type = form.cleaned_data.get('date_type')

search = MyClass.objects.filter(date_type__range(date_one, date_two))

В моей модели два разных столбца даты.(created и expires).Пользователь может выполнить фильтрацию запросов между двумя датами, но он может выбрать, хочет ли он фильтровать по времени создания или срока действия.

Я мог бы создать две строки запроса, используя if, но я действительно хочу знать, каксделай это так, как я спрашиваю.

Как я могу это сделать?Поскольку ключ перед __range является переменной.Я пробовал с (**{ filter: search_string }), но, похоже, он не совместим с __range.

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

попробуйте

filter_dict = {"{}__range".format(date_type): [date_one, date_two]}
search = MyClass.objects.filter(**filter_dict)
1 голос
/ 22 марта 2019

То, что вы пытались сделать, почти правильно!

Поиски не являются функциями (поэтому это не foo__range(start, end)), но они являются аргументами ключевых слов: foo__range=(start, end)

Итак, вы бы получили:

date_one = form.cleaned_data.get('date_one')
date_two = form.cleaned_data.get('date_two')
date_type = form.cleaned_data.get('date_type')

query_kwargs = {
   "{}__range".format(date_type): (date_one, date_two)
}
search = MyClass.objects.filter(**query_kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...