У меня есть этот код:
class MyModel(models.Model):
input_field = model.CharField(max_length=100)
class MyModelForm(forms.ModelForm):
input_field = forms.CharField(disabled=True)
class Meta:
model = MyModel
Я также читал из документов :
Когда вы явно создаете экземпляр поля формы, подобного этому, важно понимать, как связаны ModelForm
и обычный Form
.
...
Поля, определенные декларативно, остаются как есть, поэтому любые настройки, сделанные для атрибутов Meta, такиепоскольку виджеты, метки, help_texts или error_messages игнорируются;они применяются только к полям, которые генерируются автоматически.
Аналогично, поля, определенные декларативно, не рисуют свои атрибуты, такие как max_length или требуемые из соответствующей модели.Если вы хотите сохранить поведение, указанное в модели, вы должны явно задать соответствующие аргументы при объявлении поля формы.
Можно ли передать kwargs в поле формы таким образом, чтобы я могуказать disabled=True
без потери преимуществ интроспекции и настройки ModelForm
s?Essential, могу ли я взять свой торт и съесть его?
Я знаю, что могу обойти это, используя widgets = {'input_field': widgets.TextInput(attrs={'readonly':'readonly'})
} в классе Meta
, но мне интересно, есть ли лучший способдоступно
Также не ясно, будет ли изменение атрибута widgets
, как указано выше, "наследовать" конфигурацию по умолчанию, которую иначе применила бы ModelForm, например, вывести max_length
из базовой модели.