如何在 WTForms + Flask 中获取 SelectMultipleField 中的所有选中项
How to get all checked items in SelectMultipleField in WTForms + Flask
我有一个 SelectMultipleField
但是当我尝试访问选中的项目时,以为 form.fields.data
我只得到了其中的第一个。
此外,通过尝试直接从 request.form.data
到
获得答案
for key in request.form.keys():
print(str(key) + '=' + str(request.form.getlist(key)))
我可以在那里看到所有选中项目的数组。
我哪里弄错了,所以WTForms无法将所有选中的项目都传递给form.fields.data
?
我的路线:
form = ListForm()
if request.method == "GET":
form.add_items(bank.get_items())
elif request.method == "POST":
print(form.fields.data) # and in needed field i only see 'A' even if 'A', 'B' and 'C' checked
形式本身:
class Item(FlaskForm):
pass
class ListForm(FlaskForm):
fields = FieldList(FormField(Item))
submit = SubmitField('Submit')
def add_items(self, items):
for item in items:
Item.choices_field = SelectMultipleField(
choices=item.get_choices()
) # lets just assume get_choices() returned ['A', 'B', 'C', 'D'] for an element
self.fields.append_entry()
以及我的模板:
{{ form.hidden_tag() }}
<form method="post" novalidate>
{% for field in form.fields %}
<fieldset>
{{ field.choices_field }}
</fieldset>
{% endfor %}
{{ form.submit }}
</form>
我尝试使用元组而不是选项列表,但遇到了同样的问题
所以答案是从 request.form
而不是 form.data
获得答案。
我有一个 SelectMultipleField
但是当我尝试访问选中的项目时,以为 form.fields.data
我只得到了其中的第一个。
此外,通过尝试直接从 request.form.data
到
for key in request.form.keys():
print(str(key) + '=' + str(request.form.getlist(key)))
我可以在那里看到所有选中项目的数组。
我哪里弄错了,所以WTForms无法将所有选中的项目都传递给form.fields.data
?
我的路线:
form = ListForm()
if request.method == "GET":
form.add_items(bank.get_items())
elif request.method == "POST":
print(form.fields.data) # and in needed field i only see 'A' even if 'A', 'B' and 'C' checked
形式本身:
class Item(FlaskForm):
pass
class ListForm(FlaskForm):
fields = FieldList(FormField(Item))
submit = SubmitField('Submit')
def add_items(self, items):
for item in items:
Item.choices_field = SelectMultipleField(
choices=item.get_choices()
) # lets just assume get_choices() returned ['A', 'B', 'C', 'D'] for an element
self.fields.append_entry()
以及我的模板:
{{ form.hidden_tag() }}
<form method="post" novalidate>
{% for field in form.fields %}
<fieldset>
{{ field.choices_field }}
</fieldset>
{% endfor %}
{{ form.submit }}
</form>
我尝试使用元组而不是选项列表,但遇到了同样的问题
所以答案是从 request.form
而不是 form.data
获得答案。