WTForms RadioField默认值

时间:2013-05-22 14:14:11

标签: python wtforms

我正在使用这样的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 - 如何预设特定的单选按钮?

4 个答案:

答案 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()])