我可以更改表单小部件类而不在 Django 中明确重新定义它吗?

Posted

技术标签:

【中文标题】我可以更改表单小部件类而不在 Django 中明确重新定义它吗?【英文标题】:Can I change a form widget class without redefining it explicitly in Django? 【发布时间】:2014-04-20 15:33:34 【问题描述】:

我正在尝试更改 Django 表单字段的类。我的表格如下:

class MyForm(forms.Form):
    my_field = forms.ChoiceField(choices=myChoices)

为什么只能显式更改 Select 字段的类?我想要默认的Select 小部件,有没有办法在不重新定义的情况下更改它的属性?这有效:

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices, widget=forms.Select(attrs='class': 'myclass'))

但这看起来合乎逻辑且更简单,引发TypeError: __init__() got an unexpected keyword argument 'attrs'

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices, attrs='class': 'myclass')

【问题讨论】:

【参考方案1】:

代码比较多,不过如果实在不想定义widget类型类,可以这样做:

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].widget.attrs='class': 'myclass'

【讨论】:

以上是关于我可以更改表单小部件类而不在 Django 中明确重新定义它吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用模板渲染 django 小部件?

替换表单的默认多对多小部件

Django 酥脆的表单可以与自定义小部件一起使用吗?

如何将日期/日历小部件添加到 django 表单?

Django ForeignKey 表单字段小部件

如何对 Django Select 小部件中的选择进行分组?