试图过滤ChoiceField的内容

时间:2011-11-17 14:01:33

标签: django forms field 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")

但是这显示所有城市和区域都存在于数据库中,我想要的是,在第一个字段中显示所有城市,在第二个字段中仅显示与所选城市相对应的那些区域

我试图这样做:

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 个答案:

答案 0 :(得分:1)

你不能这样做。由于在渲染表单时,尚未选择城市(第一个字段)。

您可以采用两步向导式表单。第一种形式只有城市,第二种形式只有区域。在第二种形式中,您使用在第一种形式中选择的城市过滤区域。

或者你也可以使用javascript来过滤第二个字段,具体取决于第一个字段。

答案 1 :(得分:0)

您可能希望在django smart selects中使用Grouped Selects功能。看看这个重复问题的答案:

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