django-select2:如果没有选择国家,如何禁用城市选择? (django 2.2)
Posted
技术标签:
【中文标题】django-select2:如果没有选择国家,如何禁用城市选择? (django 2.2)【英文标题】:django-select2: how to disable City selection if no Country is selected? (django 2.2) 【发布时间】:2019-09-13 12:11:32 【问题描述】:我尝试使用这样的依赖字段:
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',
)
)
但如果没有选择国家,则可以选择城市。 我想限制用户选择城市而不选择国家。
【问题讨论】:
【参考方案1】:来自文档:https://django-select2.readthedocs.io/en/latest/extra.html#chained-select2
相互依赖的选择2
此外,您可能不想限制用户应该首先选择哪个字段。相反,您想根据用户在另一个选项中的选择向用户建议任何 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
【讨论】:
但我想限制 对不起,这不是我要找的以上是关于django-select2:如果没有选择国家,如何禁用城市选择? (django 2.2)的主要内容,如果未能解决你的问题,请参考以下文章
将 django-select2 与 django-filters 连接
如何在 Django 中设置 Django-Select2 小部件的初始值