使用FieldList在WTForm的selectfield中动态分配选择

时间:2019-05-18 13:02:00

标签: python flask wtforms

类似于此问题: Dynamic choices WTForms Flask SelectField

在我的烧瓶应用程序中,我有一个带有多个选择字段的WTForm。我想动态分配选择域的数目和选择域的选择。

class FormEntry(FlaskForm):
        selectfield = SelectField('Name', coerce=int, choices=[('1', 'default_choice1'), ('2', 'default_choice2')])


class MyForm(FlaskForm):
    form_entries = FieldList(FormField(FormEntry), min_entries=1)

创建FormEntry的实例并分配选项:

my_entry = FormEntry()
my_entry.selectfield.choices =[('3', 'mychoice3'), ('4', 'mychoice4')]

但是,当我使用此条目创建Form的实例时,这些选择不是我选择的选择,而是默认选择:

form_entries = [my_entry, my_entry]
form = MyForm(form_entries=form_entries)
for entry in form.form_entries:
    print(entry.selectfield.choices)

打印输出:

[('1', 'default_choice1'), ('2', 'default_choice2')]
[('1', 'default_choice1'), ('2', 'default_choice2')]

出了什么问题?如何正确分配选择?

1 个答案:

答案 0 :(得分:0)

https://wtforms.readthedocs.io/en/stable/fields.html#wtforms.fields.SelectField

从文档(重点是我的)

  

请注意, choices关键字仅被评估一次,因此,如果要创建动态下拉列表,则需要将选择列表分配给之后< / strong>实例化。输入的所有不在给定选择列表中的选择都将导致对该字段的验证失败。

即没有selectfield = SelectField('Name', coerce=int, choices=[('1', 'default_choice1'), ('2', 'default_choice2')] 改用selectfield = SelectField('Name', coerce=int)