我自己创建了这样的FieldRenderer:
class BootstrapRadioFieldRenderer(ChoiceFieldRenderer):
outer_html = '<span {id_attr}>{content}</span>'
inner_html = '<div class="radio">{choice_value}{sub_widgets}</div>'
choice_input_class = RadioChoiceInput
class BootstrapRadioSelect(RendererMixin, Select):
renderer = BootstrapRadioFieldRenderer
_empty_value = ''
正如您所见,它基于RadioChoiceInput
,它输出一个Radio元素。我想改变它以输出一个简单的“选择”元素。怎么做?
(当然我已尝试按RadioChoiceInput
更改Select
并获得__init__() takes at most 3 arguments (6 given)
)
答案 0 :(得分:1)
我不知道我有什么问题......因为答案很简单。
我没有触摸我的模型。在我的所有形式中,我都有这样的事情:
a = _(u'Statut:')
statut = forms.TypedChoiceField(
label=a, required=False,
choices=[(k, Personne.TAB_STATUT[k])
for k in Personne.TAB_STATUT],
widget=BootstrapRadioSelect(attrs={
'title': a,
}),
error_messages=e)
我只需要改变它们:“回到经典”:
statut = forms.CharField(
label=a, required=False,
widget=forms.Select(attrs={
'title': a,
'class': 'form-control'},
choices=[(k, Personne.TAB_STATUT[k])
for k in Personne.TAB_STATUT],),
error_messages=e)
它就像一个魅力。
答案 1 :(得分:0)
RadioSelect使用的对象,用于启用无线电小部件的自定义。
但是,它似乎不适用于自定义Select
小部件。
为此,我建议您将the Select
widget作为子类并覆盖它的渲染方法,如described in docs。
或者,如果您真的想要,您可以定义自己的SelectRenderer
,然后迭代self.choices
小部件并按照您的意愿呈现它们。
如果在定义窗口小部件的其他子类时需要更多的灵活性(仅修改渲染),这将非常有用;我可以想象其他Django用户也会受益于这种通用&#34;渲染自定义&#34;,所以请随意在the django-developers
mailing list中讨论这个功能。