Как ограничить выбор в поле в зависимости от другого поля в django form?

Для ограничения выбора в поле в зависимости от другого поля в Django форме можно использовать функционал DynamicChoiceField. Это позволяет динамически изменять списки выбора в зависимости от значений других полей.

Для начала, определим класс формы в Django, который будет содержать оба поля:

from django import forms

class MyForm(forms.Form):
    field1 = forms.CharField(label='Field 1')
    field2 = forms.ChoiceField(label='Field 2')

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        # Добавляем заглушку для выбора в поле 2
        self.fields['field2'].choices = [('', '---------')]

    def clean(self):
        cleaned_data = super(MyForm, self).clean()
        field1_value = cleaned_data.get('field1')

        # Определяем список выбора для поля 2 в зависимости от значения поля 1
        if field1_value == 'value1':
            choices = [('value1_opt1', 'Option 1'), ('value1_opt2', 'Option 2')]
        elif field1_value == 'value2':
            choices = [('value2_opt1', 'Option 1'), ('value2_opt2', 'Option 2')]
        else:
            choices = []

        self.fields['field2'].choices = choices

        return cleaned_data

В данном примере мы определили два поля - поле 1 (field1) типа CharField и поле 2 (field2) типа ChoiceField. В конструкторе формы мы инициализируем поле 2 заглушкой ([('', '---------')]), чтобы показать пользователю, что выбор ограничен.

Метод clean() вызывается после валидации формы и позволяет динамически обновить список выбора для поля 2. В зависимости от значения поля 1 (field1), мы определяем выбор для поля 2 (field2). В данном примере, если field1 имеет значение 'value1', то выбор в field2 будет ограничен опциями 'Option 1' и 'Option 2'. Аналогично, если field1 имеет значение 'value2', выбор будет ограничен опциями 'Option 1' и 'Option 2'. Если значение field1 не соответствует ни одному из указанных вариантов, выбор для поля 2 будет пустым.

Таким образом, при каждом изменении значения в поле 1, Django будет автоматически обновлять список выбора в поле 2, что позволит ограничить выбор в поле в зависимости от другого поля в Django форме.