前言
最近折腾起来Flask,在使用WTForm的时候遇到了一点小问题。
当提交表单时,SelectField项提示错误Not a vaild choice.
正文
此时表单代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class QuestionAddForm(FlaskForm): type = SelectField('类型', choices=list( { 1: '判断题', 2: '单选题', 3: '多选题', }.items() )) # 问题项 rank = IntegerField('难度', validators=[DataRequired()]) title = StringField('题目', validators=[DataRequired()]) data = HiddenField('数据', validators=[DataRequired()]) correct = HiddenField('正确答案', validators=[DataRequired()]) category = SelectField('分类', validators=[DataRequired()]) # 问题项 submit = SubmitField('添加') |
表面看上去没有问题,正常使用理应不会出错,但表单提交之后却出现 (Not a vaild choice).
这是因为html里所有的表单数据都是字符串类型,当选项中的 1 提交之后变成了 ‘1’ ,而 ‘1’ 并不在choices之内,导致出错。
解决方案
给SelectField添加coerce项,当执行validate_on_submit进行验证时,会进行强制转型再验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class QuestionAddForm(FlaskForm): type = SelectField('类型', coerce=int, choices=list( { 1: '判断题', 2: '单选题', 3: '多选题', }.items() )) rank = IntegerField('难度', validators=[DataRequired()]) title = StringField('题目', validators=[DataRequired()]) data = HiddenField('数据', validators=[DataRequired()]) correct = HiddenField('正确答案', validators=[DataRequired()]) category = SelectField('分类', coerce=int, validators=[DataRequired()]) submit = SubmitField('添加') |
原文链接:点击打开链接