dim137
@dim137
python, django, linux

Как сделать запрос к бд в зависимости от GET параметров?

Добрый вечер!
В views.py имеется функция:
def shows(request):
  form = SelectParams(request.GET)
	 if not form.is_valid():
		return HttpResponseBadRequest('You have entered the wrong data.')
	country    = form.cleaned_data['country']
	state        = form.cleaned_data['state']
	city          = form.cleaned_data['city']
	data         = Model.objects.filter(country=country, city=city, state=state) # TODO
	return render(request, 'template/index.html', {
		'data'    : data,
		'form'   : form,
		})

Подскажите как правильно сделать запрос к модели в зависимости от того, что выбрал пользователь без использования кучи if? Пользователь может выбрать только страну, только штат и только город, страну и штат или страну штат и город. Пробовал объект Q, но происходит какая-то путаница.
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
@nirvimel
При явном указании города нет смысла фильтровать по стране и штату, при явном указании штата нет смысла фильтровать по сране. Код может выглядеть примерно так (у меня, понятно, нет возможности проверить):
location = form.cleaned_data
city, state, country = location['city'], location['state'], location['country']
kwargs = ({'city': city} if city
   else ({'state': state} if state
   else {'country': country} if country))
data = Model.objects.filter(**kwargs)

Все это не отменяет необходимости на клиенте фильтровать список городов при выборе страны/штата.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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