flask-wtf selectField选项无效

时间:2013-01-06 20:27:21

标签: python dictionary flask wtforms

我做了一个像这样的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的某种怪癖,如果你不使用他们的格式,它似乎会在你提交表格后删除这些选择。

3 个答案:

答案 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更好。