我有一个这样的表格:
CHOICES = [
('a', 'a_value'),
('b', 'b_value'),
('c', 'c_value')
]
self.fields["choice"] = forms.ChoiceField(
widget=RadioSelect(),
choices=CHOICES,
)
如何在模板中选择此表单字段的单个元素?我希望能够做到这样的事情:
<tr><td>{{form.choice.a}}</td><td>some custom extra field</td></tr>
还是有另一种方法来改变RadioSelect的呈现方式吗?
答案 0 :(得分:7)
查看完整文档 - https://docs.djangoproject.com/en/dev/ref/forms/widgets/#radioselect
{% for radio in form.my_radio_select %} - {{ radio.choice_label }} - {{ radio.tag }} {% endfor %}
答案 1 :(得分:1)
您无法通过参数或其他方式执行此操作,呈现方式在其窗口小部件类中是硬编码的!见例如。 http://code.djangoproject.com/browser/django/trunk/django/forms/widgets.py:RadioSelect.render( - &gt; RadioFieldRenderer.render);将其子类化并覆盖render方法,然后在表单myfield = forms.MultipleChoiceField(widget=MyWidget(...))
中使用它。
答案 2 :(得分:1)
我花了几个小时试图在RadioSelect上找到一些使用自定义渲染器的方法,但没有办法传递选择号。相反,我去了一个kludgey,但简单的方法。在我的表单中添加了__init__
函数:
def __init__(self, *args, **kwargs):
super(FormName, self).__init__(*args, **kwargs)
self.radiofield_choice = re.findall(r'<li>(.+?)</li>',
unicode(self['radiofield_name']))
使用RadioSelect的默认渲染来创建窗口小部件,然后解析单个选择HTML。您甚至可以将其与定义的选项组合以创建字典而不是列表。
在我的模板中,我使用{{ form.radiofield_choice.0|safe }}
来渲染第一个项目。增加零以获得其他项目。
如果出于某种原因,只需要不包含标签的输入字段,请使用r'(<input.+/>)'
。