Python flask wtf selectField选项无效

Python flask wtf selectField选项无效,python,dictionary,flask,wtforms,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', choic

我制作了一个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')
因此,当您加载页面时,它会显示选择。我选择一个选项,按submit,它会说“这不是一个有效的选项”,并清空select字段

然后当你刷新页面时,就好像代码被破坏了,不再显示选项。。。这是一个空的下拉/选择字段

我做错了什么


编辑:由于某种原因,当您将iteritems放在视图中而不是表单中时,一切都正常工作。Flask WTF有一种怪癖,如果您不使用其格式,则在提交表单后似乎会删除选项。

您传递的是一个集合而不是dict。请将
问题列表中的逗号替换为冒号。实际上,对
.iteritems()
的调用应该已经失败了

QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree",
                                 'agree-strong': "Strongly Agree" }

出于某种原因,当您将iteritems放在视图中而不是表单中时,一切都正常工作。Flask WTF的一些怪癖是,如果您不使用其格式,则在提交表单后似乎会删除这些选项


因此,只需将.iteritems()代码移动到视图中,方法是键入form.question_field.choices=question_LIST['QuestionOne'].iteritems();比在表单文件中使用iteriterms更有效。

可能问题在于dict中的键是字符串。我以前有过这个问题,所以类似这样的事情可能会有所帮助:

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

强制
有帮助。我认为所有POST数据都是unicode,默认情况下,
concure
也等于unicode(至少在WTF表单中,如果您使用了一个,需要检查Flask WTF扩展名)。您的选择键是字符串。

很抱歉,您是对的,我错误地编写了伪代码。我确实在实际代码中正确地编写了它。所以它是正确的,但仍然不起作用。我的错误不同,这就是iteritems没有失败的原因。当我在
pre\u validate
中添加
print(“pre-choice”,self.choices,self.data)
时。我的情况是:
(u'pre-choice'、[(1,'问题')、(2,'文章')、(3,'电影')、u'2')。
。我认为当它失败时,它总是有它的原因的。在我的例子中,添加
concure=int
解决了我的问题。因为MySQL中此字段的数字类型是
int
,但是form.SelectField中的所有
值都是
str
。他们不匹配。