Django将相同的类属性添加到所有相同的类型字段中

问题描述

| 有没有一种简单的方法可以将widget的所有元素都以形式分配
class=radio
? 我知道我可以这样写
rb = forms.ChoiceField( widget=forms.RadioSelect(attrs=\'class\':\'radio\'))
表格中的所有单选按钮,但我认为应该有其他方法。因为我可能在所有单选按钮上都使用了它,所以为所有人编写代码并不好笑。     

解决方法

您可以创建自己的小部件,如下所示:
class MyRadioSelect(forms.RadioSelect):

    def __init__(self,*args,**kwargs):
         attrs = kwargs.pop(\"attrs\",{})
         if \"class\" in attrs:
             attrs[\"class\"] = \"%s radio\" % attrs[\"class\"]
         else:
             attrs[\"class\"] = \"radio\"
         kwargs[\"attrs\"] = attrs
         super(MyRadioSelect,self).__init__(*args,**kwargs)
    ,像这样?
class ClassyRadioSelect(forms.RadioSelect):
    def __init__(self,**kwargs):
        #yes,i\'ve to look up how to process args and kwargs properly
        attrs = kwargs.get(\'attrs\',{})
        attrs[\'class\'] = \' \'.join((attrs.get(\'class\',\'\'),\'radio\'))
        kwargs[\'attrs\'] = attrs
        super(ClassyRadioSelect,**kwargs)

class ClassyChoiceField(forms.ChoiceField):
    def __init__(self,choices=(),required=True,widget=None,label=None,initial=None,help_text=None,**kwargs):
        if not widget:
            widget = ClassyRadioSelect()
        super(ClassyChoiceField,self).__init__(choices,required,widget,label,initial,help_text,**kwargs)

class MyForm(forms.Form):
    classy_field1 = ClassyChoiceField()
    classy_field2 = ClassyChoiceField()