Setting default value after initialization in SelectField flask-WTForms

蹲街弑〆低调 提交于 2020-01-23 07:50:55

问题


I would like to pre-select the value for SelectField when displaying it to user. default argument works when it is passed at the time of instantiation but does not work once the field is initialized.

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

When I try to use default value to preselect option before presenting the form to user for editing, it doesn't work.

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

Need a solution to set default value to pre-set values before presenting to the user.

Scenario 2: Also does not work

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

回答1:


Once an instance of the form is created, the data is bound. Changing the default after that doesn't do anything. The reason changing choices works is because it affects validation, which doesn't run until validate is called.

Pass default data to the form constructor, and it will be used if no form data was passed. The default will be rendered the first time, then posted the second time if the user doesn't change the value.

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

(If you're using Flask-WTF's Form you can leave out the request.form part.)



来源:https://stackoverflow.com/questions/36157362/setting-default-value-after-initialization-in-selectfield-flask-wtforms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!