0

我尝试使用这样的依赖字段:

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'},
    )
)

但是如果没有选择国家,则可以选择城市。我想限制用户选择城市而不选择国家。

4

1 回答 1

0

来自文档: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-链式下拉列表与 django.html

于 2019-04-24T09:53:07.320 回答