Python flask wtf selectField选项无效
我制作了一个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
# 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
。他们不匹配。