Django: Использовать виджеты в методе init формы?
Почему виджет для поля, определенного как атрибут класса, работает, а для атрибута экземпляра внутри метода __init__
- нет? (Мне нужен метод init)
class CropForm(forms.ModelForm):
class Meta:
model = CropModel
fields = ['name', 'label']
label = forms.CharField(label='label',
widget=forms.TextInput(attrs={'class': 'input'}))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = forms.CharField(label='name',
widget=forms.TextInput(attrs={'class': 'input'}))
Как заставить работать виджет в методе __init__
? Спасибо.
Вы совсем близко:
class CropForm(forms.ModelForm):
class Meta:
model = CropModel
fields = ['name', 'label']
label = forms.CharField(
label='label', widget=forms.TextInput(attrs={'class': 'input'})
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'] = forms.CharField(
label='name', widget=forms.TextInput(attrs={'class': 'input'})
)
Джанго Form
использует метапрограммирование, чтобы посмотреть, какие поля формы определены. Каждый раз, когда вы инициализируете форму, в self.fields
создаются копии, которые затем отображаются. Таким образом, при рендеринге форма будет смотреть не на атрибуты класса, а на self.fields
словарь.
Примечание: Модели обычно не имеют суффикса
…Model
. Поэтому, возможно, лучше переименоватьвCropModel
Crop
.