Эта статья помогла мне много раз.
В основе этого лежит переопределение метода __init__
ModelForm, затем вызов метода __init__
суперкласса, а затем индивидуальная настройка полей.
class PollForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PollForm, self).__init__(*args, **kwargs)
self.fields['question'].widget = forms.Textarea()
class Meta:
model = Poll
Этот метод может показаться более сложным, чем у Васила, но он дает дополнительное преимущество, заключающееся в возможности точного переопределения любого атрибута на поле без сброса любых других атрибутов путем его повторного объявления.
ОБНОВЛЕНИЕ: Предлагаемый подход может быть обобщен для изменения всех полей даты без строгого ввода каждого имени:
from django.forms import fields as formfields
from django.contrib.admin import widgets
class PollForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PollForm, self).__init__(*args, **kwargs)
for field_name in self.fields:
field = self.fields[field_name]
if isinstance(field, formfields.DateField):
field.widget = widgets.AdminDateWidget()
class Meta:
model = Poll
Это сработало для меня на python3
и django 1.11