在python wtforms中选择具有动态选择值的字段。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python wtforms中选择具有动态选择值的字段。相关的知识,希望对你有一定的参考价值。

如何在python wtforms中做一个动态选择的选择栏。我读了几乎所有的出版物。我真的明白这一点。

  1. 不要在类表格中添加选择,因为它只被研究过一次,并且会给你带来问题,用这种方式验证。category = SelectField('Category', coerce=int)
  2. 逼迫int以确保它能被正确的读取: category = SelectField('Category', choices=[], coerce=int)
  3. 用这种方式在端点上添加选择。form.category.choices = categories

现在,这就是问题所在。

  1. 如果你不添加 choices=[],它会引发错误 NoneType。
  2. 如果你添加了选择,它不会生效,因为 "无效"

我的代码。

author=SelectField('author', choices=[], default=1) 
Cursor.execute(source, 1)
choices_source=Cursor.fetchall()
    form.source.choices= [(c[0], c[1]) for c in choices_source]

有什么简单的方法可以实现吗?

答案

设置 choices 属性后似乎可以工作。

import wtforms
from werkzeug.datastructures import MultiDict


class AuthorForm(wtforms.Form):

    author = wtforms.SelectField('author', coerce=int, default=1)


authors = [(1, 'Amy Tan'), (2, 'Michael Chabon')]
af = AuthorForm()
af.author.choices = authors
for field in af: 
    print(field)


af = AuthorForm(formdata=MultiDict([('author', '1')]))
af.author.choices = authors
if not af.validate():
    print(af.errors)
else:
    print(af.data)

输出:

<select id="author" name="author"><option selected value="1">Amy Tan</option><option value="2">Michael Chabon</option></select>
{'author': 1}

以上是关于在python wtforms中选择具有动态选择值的字段。的主要内容,如果未能解决你的问题,请参考以下文章

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

使用从前一个字段中选择的值填充 WTForms 选择字段

动态选择 WTForms Flask SelectField

十三 .Flask wtforms组件和选择框动态数据实时更新

在烧瓶 wtforms jinja select 上设置动态数据属性

Flask WTForms 动态表单依赖项 selectField 未填充在编辑页面中