擅长:python、mysql、java
<p>您不必显式声明整个小部件,只需修改不同的属性即可。
或者,如果您在实际代码中有自定义小部件,我也会</p>
<ol>
<li>创建一个自定义的模型字段类,默认情况下使用该小部件,如果这是一个通用条件,那么在表单类中它只是“自动”工作。在</li>
<li>如果它只是特定于表单的(不是特定于模型的),那么对于这种情况,我只需在表单类上显式声明表单字段,而不是在Meta中声明,然后以一种直接的方式应用继承。在</li>
</ol>
<p>但是对于默认的widgets(带有自定义属性),我会尝试如下方法</p>
<pre><code>class MyModel(models.Model):
field_foo = models.CharField(_("Foo"), max_length=50)
field_bar = models.IntegerField(_("Bar"))
class MyFormOne(forms.ModelForm):
class Meta:
model=MyModel
fields = ('field_foo', )
def __init__(*args, **kwargs):
super(MyFormOne, self).__init__(*args, **kwargs)
self.fields['field_foo'].widget.attrs['size'] = 10
# max_length should already be set automatically from model
# TextInput is also default widget for CharField
class MyFormTwo(MyFormOne):
class Meta:
model=MyModel
fields = MyFormOne.Meta.fields + ('field_foo2',)
def __init__(*args, **kwargs):
super(MyFormTwo, self).__init__(*args, **kwargs)
self.fields['field_foo2'].widget.attrs['size'] = 10
</code></pre>