我希望在向用户显示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
答案 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()
此方法也显示默认值,但是当我提交表单未提交时,经过验证的方法可以正常工作