多余的字段无关紧要。这有效:
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'}), }确实没有记录,这是我在与该行为有关的文档中可以找到的最好的(也许不是,这只是我可以找到的最好的):
如果你明确实例这样的表单字段,Django的假定你想完全定义其行为 […] 您必须声明表单字段时明确设置相关参数 。
此行为的实现在django / forms / 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行,使用声明的字段更新字段,并且fields
[‘name’]。widget变为django.forms.widgets.TextInput,这是CharField的默认值。
显然,显式字段定义具有优先权。
感谢您提出问题,很高兴知道,很好的问题。



