WTForms: 如何在SelectMultipleField中选择选项?
可以通过 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
在创建字段的时候,你可以使用 choices
和 default
这两个关键字参数,像这样:
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'])