我尝试使用像这样的相关字段:
class AddressForm(forms.Form):
country = forms.ModelChoiceField(
queryset=Country.objects.all(),
widget=ModelSelect2Widget(
model=Country,
search_fields=['name__icontains'],
)
)
city = forms.ModelChoiceField(
queryset=City.objects.all(),
widget=ModelSelect2Widget(
model=City,
search_fields=['name__icontains'],
dependent_fields={'country': 'country'},
)
)
但是,如果未选择任何国家,则可以使用城市选择。 我想限制用户选择城市而不选择国家。
答案 0 :(得分:0)
从文档中:https://django-select2.readthedocs.io/en/latest/extra.html#chained-select2
相互依赖的select2
此外,您可能不希望限制用户首先选择哪个字段。相反,您希望根据其在另一个选择中的选择向用户建议任何select2的选项。
以以下方式自定义表单:
class AddressForm(forms.Form):
country = forms.ModelChoiceField(
queryset=Country.objects.all(),
label=u"Country",
widget=ModelSelect2Widget(
search_fields=['name__icontains'],
dependent_fields={'city': 'cities'},
)
)
city = forms.ModelChoiceField(
queryset=City.objects.all(),
label=u"City",
widget=ModelSelect2Widget(
search_fields=['name__icontains'],
dependent_fields={'country': 'country'},
max_results=500,
)
)
您可以尝试在 init
中为该字段添加初始值def __init__(self,*arg, **kwargs):
super(AddressForm,self).__init__(*arg, **kwargs)
self.initial['city'] = ''
如果要限制用户选择城市,则必须在前端进行操作,因此django无法在提交表单之前控制人们的选择(或者必须制作ajax)每次国家/地区更改时都致电)。
如果您正在考虑使用其他解决方案,这就是我通常这样做的方式(并且它可以满足您的要求):https://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with-django.html