繁体   English   中英

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

[英]WTForms: How to select options in SelectMultipleField?

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

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

您可以在创建字段时使用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 -method的字典包装器)

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

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

这对我在SelectFieldSelectField

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

我猜你可以为一个SelectMultipleFieldform.myfield.default分配一个列表。 但是,键分配给默认值后,似乎在调用表单上的process方法。

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

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() ,它会丢失表单中其他字段的默认值。

干杯给你的帮助。 我尝试了最后一个答案,它对我不起作用。 通过调用流程方法,它可以正常工作,只需使用它并将不想重置的数据传递给它的数据参数。 所以像这样:

    form.process(data={k: v for k, v in request.form.items() if 
    k=='your_form_item_name'})

这些答案都不适用于我(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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM