2

我做了一个这样的 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')

因此,当您加载页面时,它会显示选项。我选择了这个选项,按提交,它说“这不是一个有效的选择”,它会清空选择字段。

然后,当您刷新页面时,就好像代码已损坏并且不再显示选择...这是一个空的下拉/选择字段。

我究竟做错了什么?

编辑:出于某种原因,当您将迭代项放在视图中而不是表单中时,一切正常。Flask-WTF 的某种怪癖,如果您不使用它们的格式,它似乎会在您提交表单后删除选择。

4

3 回答 3

9

也许问题在于您在 dict 中的键是字符串。我以前遇到过这个问题,所以也许这样的事情会有所帮助:

typeone = SelectField("Question1", coerce=str, choices=QUESTION_LIST['QuestionOne'])

这个coerce东西有帮助。会发生什么我认为所有 POST 数据都是 unicode 并且默认情况下coerce也等于 unicode(至少在 WTF 形式中,如果你使用一个,需要检查 Flask-WTF 扩展名)。你的选择键是字符串。

于 2013-01-07T06:21:27.550 回答
0

您正在传递一个集合而不是一个字典。QUESTION_LIST用冒号替换定义中的逗号。实际上调用.iteritems()应该已经失败......

QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree",
                                 'agree-strong': "Strongly Agree" }
于 2013-01-06T20:55:21.117 回答
0

出于某种原因,当您将迭代项放在视图而不是表单中时,一切正常。Flask-WTF 的某种怪癖,如果您不使用它们的格式,它似乎会在您提交表单后删除选择。

因此,只需将 .iteritems() 代码移动到 VIEW 中,只需键入 form.question_field.choices = QUESTION_LIST['QuestionOne'].iteritems(); 比在表单文件中使用 iteriterms 效果更好。

于 2013-01-07T00:48:29.657 回答