1

我想将我的应用程序中的所有 NullBooleanFields 显示为单选按钮。最好的方法是什么?

遵循模板或类似的东西将是理想的。只是为了让丰富的样式和语气不同于普通的“是/否/未知”。

'''<li class="field-%s">
    <label class="%s" title="%s">%s</label>
    <label class="y"><input type="radio" name="%s" value="1" %s /> %s</label>
    <label class="n"><input type="radio" name="%s" value="0" %s /> %s</label>
    <label class="e"><input type="radio" name="%s" value=""  %s /> %s</label>
    </li>
''' % (
        field,
        field, help text, verbose_name,
        field, y, y_label,
        field, n, n_label,
        field, e, e_label
    )
4

2 回答 2

2

最后,我发现RadioSelect即使我有很多NullBooleanFields. 即使它需要 CSS3 选择器,widget 生成的结构也足以设置<ul>样式。RadioSelect

不干,但少麻烦。一个人需要务实并继续前进。

如果有人可以提供代码来在 forms.py 级别上将默认小部件更改为from NullBooleanField,我很乐意接受答案。NullBooleanSelectRadioSelect

于 2010-09-02T16:41:57.457 回答
1

我刚刚实现了一个自定义小部件来执行此操作:

class YesNoNARadioSelect(widgets.Widget):
    CHOICES=((True,'Yes'),(False,'No'),(None,'N/A'))

    def render(self,name,value,attrs=None):
        s=[]
        for c in self.CHOICES:
            extraAttrs=attrs.copy()
            extraAttrs.update(dict(type='radio',name=name,value=c[0]))
            if value==c[0]: extraAttrs['checked']='checked'
            extraAttrs=self.build_attrs(extraAttrs)
            s.append(format_html('<label><input {}/>{}</label>',flatatt(extraAttrs),c[1]))
        return S(''.join(s))

似乎对我有用,尽管我想听听我做错了什么。

于 2014-05-04T21:39:46.710 回答