【发布时间】:2014-07-31 17:45:15
【问题描述】:
我正在使用带有 Flask 的 WTForms(不是 Flask-wtf)。 我正在使用动态设置选项的 SelectMultipleFields;
class MyForm(Form):
country = SelectMultipleField("Country", option_widget=widgets.CheckboxInput(),
widget=widgets.ListWidget(prefix_label=False))
正如我所说,选择是动态的,我查询数据库以获取新的国家,然后设置选择,类似于;
form = MyForm(request.form, obj=user) # obj = user's sqlalchemy object
form.country.choices = [(c.title(), c.title()) for c in get_distinct_countries()]
get_distinct_countries 在哪里查询数据库并返回一个包含国家/地区[('country a', 'country a'), ('country b', 'country b', (...)] 的列表
这一切都很好,但现在我想设置默认值,这也是动态的,所以我尝试了这个;
form = PersonalForm(request.form, obj=user)
form.country.choices = [(c.title(), c.title()) for c in get_distinct_countries()] # to fix
form.country.default = [(i.title(), i.title()) for i in get_user_country(userid)]
这是我的 get_countries 和 get_user_country 函数;
def get_user_country(id): # todo
with session_scope() as session:
countries = session.query(UserCountry).filter_by(user_id=id)
return [c.country for c in countries.all()]
def get_distinct_countries(): # todo
"""Returns a list of all countries (without duplication)"""
with session_scope() as session:
countries = session.query(Country).distinct(Country.country).group_by(Country.country)
return [i.country.capitalize() for i in countries.all()]
get_user_country 的输出类似于[('country a, 'country a'), (...)]
没用,我没有得到任何回溯,但是在检查表单字段时,没有设置为默认值。我怎样才能做到这一点?
注意,我传递了 obj=user,因为这是用户将重新编辑他的设置的表单,所以我希望数据在那里,显然我看到的一切都是正确的,除了国家/地区的数据。
谢谢。
【问题讨论】: