在Materialise中,您可以使用属性name
定义单选按钮的单选按钮组,但Flask-WTForms会使用属性name
绑定输入。
如果我的模板中有以下内容:
{{ form.radio1(type='radio', name='group1') }}
{{ form.radio2(type='radio', name='group1') }}
会出现错误:
TypeError: html_params() got multiple values for keyword argument 'name'
如果我们不添加名称,那么无线电将无法像预期那样用作无线电,就像复选框一样。
我怎样才能解决这个问题?
这是我的表单类:
class AbcForm(FlaskForm):
field1 = HiddenField('Field1')
field2 = HiddenField('Field2')
然后在运行时我会动态添加无线电,这里有一个简化:
class F(AbcForm):
pass
setattr(F, radio1, BooleanField('Radio1')
setattr(F, radio2, BooleanField('Radio2')
form = F(field1=x, field2=y)
答案 0 :(得分:2)
您无法在字段中设置name
属性,wtforms已为您执行此操作。
使用RadioField代替HiddenField:
from wtforms import RadioField
from flask_wtf import Form
class YourForm(Form):
radio_group = RadioField('label', choices=[('value','description'),('value_two','some other description')])
(...)
然后,在您的终端中:
@route('/your/route')
def your_endpoint():
your_form = YourForm()
(...)
return render_template('/your/template.html', form=your_form)
最后,在您的模板中:
<form action="#">
{% for subfield in form.radio_group %}
<p>
{{ subfield }}
{{ subfield.label }}
</p>
{% endfor %}
</form>
这将生成以下代码:
<form action="#">
<p>
<input id="radio_group-0" name="radio_group" type="radio" value="value">
<label for="radio_group-0">description</label>
</p>
<p>
<input id="radio_group-1" name="radio_group" type="radio" value="value_two">
<label for="radio_group-1">some other description</label>
</p>
</form>
其中,如果物料化包含在模板中,则会正确显示单选按钮,如this plunker所示。