我做了一个像这样的SelectField:
# constants.py
QUESTION_LIST = {}
QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree", 'agree-strong': "Strongly Agree" }
#forms.py
from constants import *
typeone = SelectField('QuestionOne',
choices=QUESTION_LIST['QuestionOne'].iteritems(),
description='Answer the question')
因此,当您加载页面时,它会显示选项。我选择了这个选项,然后按“提交”并显示“这不是一个有效的选择”,它会清除选择字段。
然后当你刷新页面时,就好像代码坏了而且它不再显示选择......这是一个空的下拉/选择字段。
我做错了什么?
编辑:出于某种原因,当你将iteritems放在视图而不是表单中时,一切正常。 Flask-WTF的某种怪癖,如果你不使用他们的格式,它似乎会在你提交表格后删除这些选择。
答案 0 :(得分:9)
也许问题是你在dict中的键是一个字符串。我以前遇到过这个问题,所以也许这样的事情会有所帮助:
typeone = SelectField("Question1", coerce=str, choices=QUESTION_LIST['QuestionOne'])
这coerce
件事有所帮助。会发生什么我认为所有POST数据都是unicode,默认情况下coerce
也等于unicode(至少在WTF表单中,如果你使用的话需要检查Flask-WTF扩展名)。你的选择键是字符串。
答案 1 :(得分:0)
你传递的是一套而不是一个字典。用冒号替换QUESTION_LIST
定义中的逗号。实际上对.iteritems()
的调用应该已经失败了......
QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree",
'agree-strong': "Strongly Agree" }
答案 2 :(得分:0)
出于某种原因,当你将iteritems放在视图而不是表单中时,一切都有效。 Flask-WTF的某种怪癖,如果你不使用他们的格式,它似乎会在你提交表格后删除这些选择。
所以只需将.iteritems()代码移入VIEW,输入form.question_field.choices = QUESTION_LIST ['QuestionOne']。iteritems();比在表单文件中使用iteriterms更好。