我目前正在使用WTFORMS创建一个动态选择字段,但是它从未提交,并且由于以下错误而使验证失败。

Not a valid choice

我的字段是这样创建的:
area = SelectField()

在 View 中,我从数据库中获取选项,如下所示:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]

但是,如果我创建静态选项,它将起作用。

最佳答案

我的猜测是Area.idint-当数据从客户端返回时,WTForms会将其视为字符串,除非将可调用对象传递给 coerce 构造函数的wtforms.fields.SelectField关键字参数:

area = SelectField(coerce=int)

或者,如果您使用的是SQLAlchemy,则可以使用 wtforms.ext.sqlalchemy.fields.QuerySelectField (如果使用的是WTForms 3+,则可以使用 wtforms_sqlalchemy ):
area = QuerySelectField(query_factory=Area.objects.all,
                            get_pk=lambda a: a.id,
                            get_label=lambda a: a.name)

关于python - 不是动态选择字段WTFORMS的有效选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13964152/

10-11 20:41