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

时间:2011-04-01 22:57:26

标签: python html select wtforms

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

设置选项

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

5 个答案:

答案 0 :(得分:21)

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

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