2013-01-04 35 views
2

我使用的ModelForm,並試圖建立一個CSS類上一個Django forms.RadioSelect小部件一樣應用CSS類forms.RadioSelect部件

class Meta: 
    model = models.MyModel 
    fields = ('rating',) 
    widgets = { 
     'rating': forms.RadioSelect(attrs={'class':'star'}), 
    } 

但類=「明星」不會在得到渲染HTML。

def __init__(self, *args, **kwargs): 
    super(MyModelForm, self).__init__(*args, **kwargs) 
    self.fields['rating'].widget.attrs['class'] = 'star' 

也沒有工作:

我也嘗試使用。我嘗試與forms.Textarea小部件一樣的東西,在那裏我能夠獲得css類呈現。

我在這裏做了什麼錯誤或沒有RadioSelect只是不支持類屬性(我想類名應用於所有無線電輸入)?

回答

7

與其他小部件一樣,複選框和無線小部件不會像Input那樣繼承。

類屬性確實適用於RadioSelect,但它被單獨應用於每個無線電輸入。

例如考慮下面的形式:

from django import forms 
class MyForm(forms.Form): 
    my_field = forms.ChoiceField(widget=forms.RadioSelect(attrs={'class': 'star'}), choices=(('x', 'x'), ('y', 'y'),)) 

它將輸出在模板下面的HTML:

<tr><th><label for="id_my_field_0">My field:</label></th> 
    <td> 
    <ul> 
     <li><label for="id_my_field_0"><input value="x" type="radio" class="star" name="my_field" id="id_my_field_0" /> x</label></li> 
     <li><label for="id_my_field_1"><input value="y" type="radio" class="star" name="my_field" id="id_my_field_1" /> y</label></li> 
    </ul> 
    </td> 
</tr> 

注意,類被施加到每個input元件。

+0

好,感謝您的回答。最後我發現,一旦我刪除了對django-crispy-forms的依賴關係,RadioSelect的行爲就像你解釋的那樣。我應該提到,我首先使用了django-crispy-forms。 – mzu