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

24 投票
5 回答
31533 浏览
提问于 2025-04-16 14:55

可以通过 form.myfield.choices=[("1","Choice1"), ("2","Choice2")] 这种方式来设置选项。

那么,怎么才能设置默认选中的选项呢?

5 个回答

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)

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

19

这是我在一个 SelectField 上成功的做法:

form.myfield.default = '1'
form.process()

我猜对于 SelectMultipleField,你可以直接把一个列表赋值给 form.myfield.default。不过,关键是你在给默认值赋值后,需要调用一下表单的 process 方法。

32

在创建字段的时候,你可以使用 choicesdefault 这两个关键字参数,像这样:

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

SelectMultipleField(choices = my_choices, default = ['1', '3'])

这样就会把选项1和选项3标记为已选中。


补充: 默认值在表单被创建时会被处理(复制到 data 成员中),所以如果你之后改变默认值,是不会有任何效果的,除非你手动调用字段的 process() 方法。你可以像这样设置 data 成员:

form.myfield.data = ['1', '3']

不过我不太确定这样做是否是个好习惯。


补充: 如果你想实际设置数据而不是默认值,最好还是通过表单来加载数据。

Form 对象的第一个参数是 formdata,它会用这个数据自动填充字段的值。(你应该使用一个带有 getlist 方法的字典包装来实现这一点)

你也可以在创建表单的时候使用关键字参数来设置数据,像这样:

form = MyForm(myfield = ['1', '3'])

撰写回答