django-select2: как отключить выбор города, если не выбрана страна?(Джанго 2.2) - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь использовать зависимые поля, например:

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 Ответ

0 голосов
/ 24 апреля 2019

Из документа: 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

...