2011-05-26 222 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() 
相關問題