在SelectField flask-WTForms

时间:2016-03-22 14:37:27

标签: python flask wtforms

我希望在向用户显示SelectField时预先选择该值。 default参数在实例化时传递但在初始化字段后不起作用。

class AddressForm(Form):
    country = SelectField('Country',choices=[('GB', 'Great Britan'), ('US', 'United States')], default='GB')    # works

当我在将表单提交给用户进行编辑之前尝试使用default值预选选项时,它无法正常工作。

address_form = AddressForm()
address_form.country.default='US'    # doesnot work

需要一个解决方案,在呈现给用户之前将默认值设置为预设值。

场景2:也不起作用

class AddressForm(Form):
        country = SelectField('Country')    # works

address_form = AddressForm()
address_form.country.choices=[('GB', 'Great Britan'), ('US', 'United States')]
address_form.country.default='US'    # doesnot work

3 个答案:

答案 0 :(得分:7)

创建表单实例后,数据就会绑定。在此之后更改默认值并不做任何事情。更改choices的原因之所以有效,是因为它会影响验证,在调用validate之前不会运行。

将默认数据传递给form constructor,然后使用if no form data was passed。默认值将在第一次呈现,然后在用户未更改值时第二次发布。

form = AddressForm(request.form, country='US')

(如果你正在使用Flask-WTF' Form,你可以省略request.form部分。)

答案 1 :(得分:4)

我知道你可能解决了这个问题。但我认为它不再起作用了。而且因为这是在 google 上搜索问题时出现的第一件事,所以我想为遇到此问题的人提供一个可行的解决方案(至少对我而言)。

要确认默认选择的更改,我们必须添加address_form.process() . 就是这样!

完整的解决方案是:

class AddressForm(Form):
        country = SelectField('Country')    # works

address_form = AddressForm()
address_form.country.choices=[('GB', 'Great Britan'), ('US', 'United States')]
address_form.country.default='US'
address_form.process()    # works

答案 2 :(得分:0)

class AddressForm(Form):
    country = SelectField('Country')    # works

address_form = AddressForm()
address_form.country.choices=[('GB', 'Great Britan'), ('US', 'United States')]
address_form.country.default='US'
address_form.process()

此方法也显示默认值,但是当我提交表单未提交时,经过验证的方法可以正常工作