2011-05-26 226 views
2

是否有任何简单的方法将class=radio分配给其窗口小部件在窗体中放射选择的所有元素? 我知道我可以写这样Django将相同的类属性添加到所有相同类型的字段

rb = forms.ChoiceField(widget=forms.RadioSelect(attrs='class':'radio')) 

在表单中所有单选按钮,但我觉得应该有其他方式。因为我可能将它用于所有单选按钮,并且为所有人写这个并不好笑。

回答

2

您可以创建自己的小部件,如:

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) 
1

是这样的?

class ClassyRadioSelect(forms.RadioSelect): 
    def __init__(self, *args, **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, self).__init__(*args, **kwargs) 

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

class MyForm(forms.Form): 
    classy_field1 = ClassyChoiceField() 
    classy_field2 = ClassyChoiceField() 
相关问题