我正在使用这样的wtforms生成一个html表单:
<div class="control-group">
{% for subfield in form.time_offset %}
<label class="radio">
{{ subfield }}
{{ subfield.label }}
</label>
{% endfor %}
</div>
我的表单类是这样的:
class SN4639(Form):
time_offset = RadioField(u'Label', choices=[
('2', u'Check when Daylight saving has begun, UTC+02:00'),
('1', u'Check when Daylight saving has stopped, UTC+01:00')],
default=2, validators=[Required()])
当我现在打开编辑表单时,我通过SQL获得值1或2 - 如何预设特定的单选按钮?
答案 0 :(得分:6)
default = 2需要是string类型,而不是int:
class SN4639(Form):
time_offset = RadioField(u'Label', choices=[
('2', u'Check when Daylight saving has begun, UTC+02:00'),
('1', u'Check when Daylight saving has stopped, UTC+01:00')],
default='2', validators=[Required()])
答案 1 :(得分:2)
如果我理解您的问题,您希望使用预先选择的选项进行表单渲染(而不是在没有向表单提交任何值的情况下返回默认选项)...
您可以做的是在设置预先选择的值时构建表单:
myform = SN4639(time_offset='2')
然后将myform
传递给您要渲染的模板。
答案 2 :(得分:0)
Form.__init__
接受一个关键字参数obj=
,如果没有提供formdata或其他默认值,它将填充给定对象的表单。将结果从数据库传递给它,它应该可以工作。
答案 3 :(得分:0)
我的朋友,
实例化表单后,您需要将数据库中的数据填写到.data字段中。看那个例子:
my_instance = SN4639()
my_db_id = get_id_on_my_db() # fill the variable with the database id
my_instance.time_offset.data = my_db_id # here's the cat jump
现在,当您在 HTML 中使用 my_instance.time_offset() 时,将选择正确的收音机
重要提示:
如果你的id是整数,你必须在RadioField中添加参数coerce=int。看那个例子:
time_offset = RadioField(u'Label', choices=[
(2, u'Check when Daylight saving has begun, UTC+02:00'),
(1, u'Check when Daylight saving has stopped, UTC+01:00')],
coerce=int,
default=2, validators=[Required()])