Попытка отфильтровать содержимое ChoiceField - PullRequest
0 голосов
/ 17 ноября 2011

(мой английский нет, извините) У меня проблема с созданием формы поиска по местоположению: у меня сейчас 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 Но, в конце концов, не нужно оставлять это, кто-то может мне помочь?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

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

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

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

0 голосов
/ 27 ноября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...