如何为Django ModelForm设置默认小部件属性?

Kev*_*vin 10 django django-forms

我想将TextInput Widget的class属性设置为我的表单中使用它的所有字段的一个值,而不必在Meta中列出它们:widgets = {....这可能吗?

谢谢.

Pau*_*ine 14

您可以覆盖构造函数以修改所有TextInput小部件:

from django import forms

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.items():
            if field.widget.__class__ == forms.widgets.TextInput:
                if 'class' in field.widget.attrs:
                    field.widget.attrs['class'] += ' my-class'
                else:
                    field.widget.attrs.update({'class':'my-class'})
    class Meta:
        model = MyModel
Run Code Online (Sandbox Code Playgroud)

你可以用装饰器覆盖init吗?另外,在attrs.update()之前应该有一个if语句因为我想设置一个默认值而不是覆盖可能已存在的内容. - 凯文

未经测试,但我猜你可以继承MyForm,如果你经常使用它.