Попытка отфильтровать содержимое ChoiceField

(Мой английский нет, извините) У меня проблема с созданием формы поиска по местоположению: у меня есть form.py в настоящее время следующим образом:

from models import City, Zone

class SearchForm1(forms.Form):
   cityf = forms.ModelChoiceField(queryset=City.objects.all(), empty_label="none")
   zonef = forms.ModelChoiceField(queryset=Zone.objects.all(), empty_label="none")

Но это отображается со всеми городами и районами, существующими в БД, и я пытаюсь сделать так, чтобы в 1-м поле отображались все города, а во 2-м поле отображались только те районы, которые соответствуют выбранному городу.

Я пытался сделать так:

class SearchForm1(forms.Form):
   cityf = forms.ModelChoiceField(queryset=City.objects.all(), empty_label="none")
   zonef = forms.ModelChoiceField(queryset=City.objects.get(
             name_city="cityf").zone_set.all(), empty_label="none")

^ Но я получаю эту ## ОШИБКУ: ^

Exception Type: DoesNotExist
Exception Value:

City matching query does not exist.

Exception Location:

Я также смотрел на это: http://www.stereoplex.com/blog/filtering-dropdown-lists-in-the-django-admin Но в конце концов не нужно оставлять его, кто-нибудь может мне помочь?


person Barceló    schedule 17.11.2011    source источник


Ответы (2)


Вы не можете этого сделать. Так как на момент рендеринга формы город (первое поле) еще не выбран.

Вы можете сделать это либо в форме двухшагового мастера. Если в первой форме есть только город, то во второй - только зона. Во второй форме вы фильтруете зоны, используя город, выбранный в первой форме.

В качестве альтернативы вы можете использовать javascript, где вы фильтруете второе поле в зависимости от первого поля.

person ojii    schedule 17.11.2011
comment
Большое спасибо, попробуйте создать 2 формы, но не могли бы вы привести пример того, как это можно сделать с помощью JavaScript? - person Barceló; 17.11.2011

Возможно, вы захотите использовать функцию группового выбора в умном выборе django. Проверьте этот ответ на повторяющийся вопрос:

https://stackoverflow.com/a/8390892/538471

person dan-klasson    schedule 27.11.2011