Djangoselect2:如果没有选择国家,如何禁用城市选择?(Django 2.2)

2024-05-05 01:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用如下依赖字段:

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

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


Tags: namecityfieldssearchmodelobjectsformsall
1条回答
网友
1楼 · 发布于 2024-05-05 01:31:10

从文件: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中的字段添加初始值

^{pr2}$

如果您想限制用户选择您必须在前端完成的城市,那么django无法在提交表单之前控制人们选择的内容(或者每次国家发生变化时都要进行ajax调用)。在

如果您正在考虑使用另一种解决方案,那么我通常是这样做的(而且它可以满足您的需要):https://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with-django.html

相关问题 更多 >