我想在我的应用程序中显示所有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
)
答案 0 :(得分:2)
最后,我认为即使我有很多RadioSelect
,将窗口小部件逐个设置为NullBooleanFields
也是代码较少。 <ul>
小部件生成的RadioSelect
足够结构化,即使它需要CSS3选择器。
不干,但不那么麻烦。一个人需要务实并继续前进。
如果有人可以在forms.py级别提供代码以将NullBooleanField
的默认小部件从NullBooleanSelect
更改为RadioSelect
,我很乐意接受答案。
答案 1 :(得分: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))
似乎对我有用,虽然我想听到任何我做错的事。