Flask SelectField (Not a vaild choice) 错误解决

版权声明:本文为博主原创文章,转载请注明出处。

前言

最近折腾起来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('添加')

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×