WTForms:如何在SelectMultipleField中选择选项?

lec*_*tif 15 html python select wtforms

选择可以使用 form.myfield.choices=[("1","Choice1"), ("2","Choice2")]

设置所选选项的方法是什么?

Ale*_*amo 21

您可以在创建字段时使用choicesdefault关键字参数,如下所示:

my_choices = [('1', 'Choice1'), ('2', 'Choice2'), ('3', 'Choice3')]

SelectMultipleField(choices = my_choices, default = ['1', '3'])
Run Code Online (Sandbox Code Playgroud)

这会将选项1和3标记为已选中.


编辑:data当表单被实例化时,默认值显然被处理(复制到成员中),因此更改默认值之后将没有任何效果,除非您在该字段上手动调用process().您可以设置data-member,如下所示:

form.myfield.data = ['1', '3']
Run Code Online (Sandbox Code Playgroud)

但我不确定他们中的任何一个是不是一个好习惯.


编辑:如果您想要实际设置数据而不是默认值,您应该使用表单来加载数据.

Form对象formdata作为第一个参数,并使用它来自动填充字段值.(你应该使用带有getlist -method的字典包装器)

您还可以使用关键字参数在创建表单时设置数据,如下所示:

form = MyForm(myfield = ['1', '3'])
Run Code Online (Sandbox Code Playgroud)

  • 四年后,我发现虽然 `form.field.data = [1,2,3]` 不起作用,但 `form.field.process_data([1,2,3])` 可以。如果您的默认值不是固定的,而是依赖于来自数据库或其他东西的值,则很方便。 (3认同)

kru*_*pan 18

这对我有用SelectField:

form.myfield.default = '1'
form.process()
Run Code Online (Sandbox Code Playgroud)

我猜你可以form.myfield.default为一个分配一个列表SelectMultipleField.但是,密钥似乎是process在您分配默认值后调用表单上的方法.


Jaz*_*aza 5

这对我有用(带有动态多选字段):

form  = MyForm(request.form, obj=my_obj)
form.tags.choices = [('1', 'abc'), ('2', 'def')]
form.tags.default = ['1', '2']
form.tags.process(request.form)
Run Code Online (Sandbox Code Playgroud)

如果我只是调用form.process(),它会丢失表单中其他字段的默认值。