django RadioSelect小部件列表ID

时间:2011-10-02 14:16:22

标签: django django-forms

我目前在我的一个表单类上有一个RadioSelect小部件,我想用css设置样式。但是,呈现的窗口小部件包含在ul中,列表没有ID。

将ID添加到渲染列表的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

子类RadioFieldRenderer并覆盖render方法。

RadioFieldRenderer是RadioSelect用来启用无线电小部件自定义的对象。

将类添加到ul元素的示例实现:

from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

class MyRadioFieldRenderer(forms.widgets.RadioFieldRenderer):

    def render(self):
        """Outputs a <ul> for this set of radio fields."""
        return mark_safe(u'<ul class="inputs-list">\n%s\n</ul>' % 
                u'\n'.join([u'<li>%s</li>'
                % force_unicode(w) for w in self]))

用法:

field = forms.ChoiceField(label=_('field'),
        choices=FIELD_CHOICES,
        widget=forms.widgets.RadioSelect(
            renderer=MyRadioFieldRenderer
            )
        )

答案 1 :(得分:1)

我没有修改渲染的html的解决方案。 但是你可以将渲染的html放在一个带有id的标签(或者我的情况下是一个类)中:

<td class="tria_tag"   >                
                    <ul>
<li><label for="id_935591-estat_0"><input checked="checked" name="935591-estat" value="2" id="id_935591-estat_0" type="radio" class="presenciaEstat" /> Present</label></li>
<li><label for="id_935591-estat_1"><input value="3" type="radio" class="presenciaEstat" name="935591-estat" id="id_935591-estat_1" /> Falta</label></li>
<li><label for="id_935591-estat_2"><input value="4" type="radio" class="presenciaEstat" name="935591-estat" id="id_935591-estat_2" /> Justificada</label></li>
<li><label for="id_935591-estat_3"><input value="5" type="radio" class="presenciaEstat" name="935591-estat" id="id_935591-estat_3" /> Retràs</label></li>
</ul>
                </td>

然后使用jquery,您可以访问:

$('.tria_tag').each(
   function(index) {
     ul=$(this).children().first();
     ...