#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