flask-wtf selectField choices not valid

痞子三分冷 提交于 2019-12-10 11:18:47

问题


I made a SelectField like this:

# 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')

So when you load the page, it shows the choices. I pick the choice, press submit and it says "this is not a valid choice" and it blanks out the select field.

Then when you refresh the page, it's as if the code is broken and it doesn't show choices anymore... It's an empty dropdown/select field.

What am I doing wrong?

EDIT: For some reason, when you put the iteritems in the view instead of the form ,everything works. Some sort of quirk with Flask-WTF where if you don't use their format it seems to delete the choices after you submit form.


回答1:


Maybe the problem is that your keys in dict are a strings. I had this issue before, so maybe something like this would help:

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

This coerce thingie helped. What happens I think that all POST data is unicode and by default coerce is also equals to unicode (at least in WTF forms, need to check Flask-WTF extension if you do use one). And your choices keys are strings.




回答2:


You are passing a set instead of a dict. Replace the commas in your QUESTION_LIST definition with colons. Actually the call to .iteritems() should already fail...

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



回答3:


For some reason, when you put the iteritems in the view instead of the form ,everything works. Some sort of quirk with Flask-WTF where if you don't use their format it seems to delete the choices after you submit form.

So just moving the .iteritems() code into the VIEW, by typing form.question_field.choices = QUESTION_LIST['QuestionOne'].iteritems(); Works better than using iteriterms inside the form file.



来源:https://stackoverflow.com/questions/14186412/flask-wtf-selectfield-choices-not-valid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!