不是动态选择字段 WTFORMS 的有效选择

新手上路,请多包涵

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

 Not a valid choice

我的字段是这样创建的:

 area = SelectField()

在视图中,我像这样从数据库中获取选项:

 form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]

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

原文由 ismail 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 471
2 个回答

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

 area = SelectField(coerce=int)

或者,如果您使用的是 SQLAlchemy,则可以使用 wtforms.ext.sqlalchemy.fields.QuerySelectFieldwtforms_sqlalchemy 如果您使用的是 WTForms 3+):

 area = QuerySelectField(query_factory=Area.objects.all,
                            get_pk=lambda a: a.id,
                            get_label=lambda a: a.name)

原文由 Sean Vieira 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是不用 QuerySelectField 的解决方法。

这是我的做法:

 years = [(str(y), y) for y in reversed(range(1950, 2013))]
years.insert(0, ('','year'))
year = wt.SelectField(choices=years)

原文由 Rickard Zachrisson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题