可以使用form.myfield.choices=[("1","Choice1"), ("2","Choice2")]
设置所选选项的方法是什么?
答案 0 :(得分:21)
您可以在创建字段时使用choices
和default
关键字参数,如下所示:
my_choices = [('1', 'Choice1'), ('2', 'Choice2'), ('3', 'Choice3')]
SelectMultipleField(choices = my_choices, default = ['1', '3'])
这会将选项1和3标记为已选择。
编辑:当表单被设置时,显然会处理默认值(复制到data
成员中),因此更改默认值将不会产生任何影响,除非您手动调用在该领域的process()。您可以设置data
-member,如下所示:
form.myfield.data = ['1', '3']
但我不确定他们中的任何一个是不是一个好习惯。
编辑:如果您想要实际设置数据而不是默认值,您应该使用该表单来加载数据。
Form
个对象将formdata
作为第一个参数,并使用它自动填充字段值。 (你应该使用带有getlist -method的字典包装器)
您还可以使用关键字参数在创建表单时设置数据,如下所示:
form = MyForm(myfield = ['1', '3'])
答案 1 :(得分:18)
这对我SelectField
:
form.myfield.default = '1'
form.process()
我猜你可以为form.myfield.default
的{{1}}分配一个列表。但是,在您指定默认值之后,关键似乎是在表单上调用SelectMultipleField
方法。
答案 2 :(得分:2)
这对我有用(使用动态多选字段):
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()
,它会丢失我表单中其他字段的默认值。
答案 3 :(得分:0)
干杯给你的帮助。我尝试了最后一个答案,它对我不起作用。通过调用流程方法,它可以正常工作,只需使用它并将不想重置的数据传递给它的数据参数。所以像这样:
form.process(data={k: v for k, v in request.form.items() if
k=='your_form_item_name'})
答案 4 :(得分:0)
这些答案都不对我有用(WTForms 2.2);他们都导致了同样的问题。当我通过POST请求提交数据时,无论我对其中的值进行何种编辑,我设置为默认值的值(无论是.default,.data,.process_data()还是.process())都将返回到我的控制器。浏览器中的表单。
为解决此问题,我将请求类型传递回了控制器,如果是POST请求,则跳过了设置默认值的部分。
form = controller.getForm(request= request.method)
以及在我处理提交内容的控制器中
getForm(request="")
# ...
if request != "POST":
# Set the default values for the form
else:
# Go straight to validating the form data