![](/img/trans.png)
[英]Flask + WTForms + SelectMultipleField and Dynamic Choices
[英]WTForms: How to select options in SelectMultipleField?
可以使用form.myfield.choices=[("1","Choice1"), ("2","Choice2")]
设置所选选项的方法是什么?
您可以在创建字段时使用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 -method的字典包装器)
您还可以使用关键字参数在创建表单时设置数据,如下所示:
form = MyForm(myfield = ['1', '3'])
这对我在SelectField
上SelectField
:
form.myfield.default = '1'
form.process()
我猜你可以为一个SelectMultipleField
为form.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.