Как получить значение экземпляра поля в форме модели?

#django #django-forms

#django #django-forms

Вопрос:

У меня есть форма модели, в которой при первом отображении формы я хочу отключить одно поле на основе значения другого:

 class MyForm(forms.ModelForm):
   field_1 = forms.BooleanField(default=False)
   field_2 = forms.CharField(default='mytext', required=True)
 

Т.е. Если field_1 есть False , то field_2 будет иметь attr виджета disabled .

Я знаю, что могу установить disabled attr __init__ , но как мне найти значение field_1 ? Например:

 class MyForm(forms.ModelForm):
   field_1 = forms.BooleanField(default=False)
   field_2 = forms.CharField(default='mytext', required=True)

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)

    // If field_1 is False then:
       self.fields['field_2'].disabled = True
 

Я могу получить начальное значение field_1 с self.fields['field_2'].initial помощью, но мне нужно фактическое значение экземпляра.

Ответ №1:

После того, как вы вызвали конструктор для родительского класса вашей формы, вы можете получить доступ к атрибуту экземпляра, который является экземпляром модели, которую вы хотите обновить, или к новому экземпляру модели, которую вы хотите создать.

 class MyForm(forms.ModelForm):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.fields['field_2'].disabled = not self.instance.field_1