它是否是一個額外的領域並不重要。這工作:
class FooForm(forms.ModelForm):
class Meta:
model = People
widgets = {
'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
這不:
class FooForm(forms.ModelForm):
name = forms.CharField()
class Meta:
model = People
widgets = {
'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
這是not documented indeed,這是我能找到的文檔最好的,可能涉及到的行爲(也許它沒有,它只是盡我所能找到):
如果顯式實例這樣的表單字段,Django的假定你想完全定義其行爲 [...] 當聲明表單域時,您必須明確設置相關參數。
這種行爲的實施是在Django /表格/ models.py線219:
204 if opts.model:
205 # If a model is defined, extract form fields from it.
206 fields = fields_for_model(opts.model, opts.fields,
207 opts.exclude, opts.widgets, formfield_callback)
208 # make sure opts.fields doesn't specify an invalid field
209 none_model_fields = [k for k, v in fields.iteritems() if not v]
210 missing_fields = set(none_model_fields) - \
EE 211 set(declared_fields.keys())
212 if missing_fields:
213 message = 'Unknown field(s) (%s) specified for %s'
214 message = message % (', '.join(missing_fields),
215 opts.model.__name__)
216 raise FieldError(message)
217 # Override default model fields with any custom declared ones
218 # (plus, include all the other declared fields).
219 fields.update(declared_fields)
後線206,場[ '名' 小窗口是確實在指定的textarea的Meta.widgets。
在第219行,字段用declared_fields更新,fields ['name']。widget變成django.forms.widgets.TextInput,它是CharField的默認值。
顯然,明確的字段定義具有優先權。
感謝提問,很高興知道,很好的問題。
你確定你是在Django的1.4? Form.Meta.widgets是在Django 1.4中引入的。 – jpic
是的。 'Django版本:\t 1.4' –