Python 多个SelectFields的WTForm FieldList只发送请求中的第一个字段
我使用SelectField实现了WTForm的FieldList,以基于JSON文件中的数据呈现多个select选项。它很好地显示选择选项,但是当我尝试传递用户通过SubmitField表单选择的所有值时,请求仅包含第一个值 问题:如何从路由中的多个SelectFields访问所有选定值 有趣的注意: 我对多个StringFields执行了相同的FieldList方法,并获得了请求中预期的每个值。为什么SelectFields的情况会有所不同? 多个选择字段: 这里,Ford、Associate和Bucks是选择字段中的值。 请求-响应:来自request.form: 请注意,只有福特显示。为什么不把钱和钱联系起来呢? 注意所有文本字段是如何正确显示的 My forms.py: 我的模板home.html:Python 多个SelectFields的WTForm FieldList只发送请求中的第一个字段,python,rest,flask,flask-wtforms,wtforms,Python,Rest,Flask,Flask Wtforms,Wtforms,我使用SelectField实现了WTForm的FieldList,以基于JSON文件中的数据呈现多个select选项。它很好地显示选择选项,但是当我尝试传递用户通过SubmitField表单选择的所有值时,请求仅包含第一个值 问题:如何从路由中的多个SelectFields访问所有选定值 有趣的注意: 我对多个StringFields执行了相同的FieldList方法,并获得了请求中预期的每个值。为什么SelectFields的情况会有所不同? 多个选择字段: 这里,Ford、Associa
问题是我在循环中创建表单时没有覆盖表单的 名称,因此每个SelectFields都有相同的名称 快速修复只是在名称后面附加了一个唯一的id: 对于k,v,在选择项中: some_id=uuid.uuid1 选择\u entry=SelectForm select_entry.select.name=fselect_entry-{some_id}每个SelectForm都是唯一的 选择_entry.select.label=k 选择_entry.select.choices=v 所有选择项。附加选择项
问题是我在循环中创建表单时没有覆盖表单的 名称,因此每个SelectFields都有相同的名称 快速修复只是在名称后面附加了一个唯一的id: 对于k,v,在选择项中: some_id=uuid.uuid1 选择\u entry=SelectForm select_entry.select.name=fselect_entry-{some_id}每个SelectForm都是唯一的 选择_entry.select.label=k 选择_entry.select.choices=v 所有选择项。附加选择项
class SelectForm(FlaskForm):
select = SelectField(choices=[]) #TODO testing without placeholder
class SelectFormList(FlaskForm):
"""A form that supports multiple select forms"""
select_entries = FieldList(FormField(SelectForm))
<form id="metadata_home_fom" action="{{ url_for('save_metadata') }}" method="POST">
{% for select_form in select_metadata_form_list.select_entries %}
{{ select_form.hidden_tag() }}
{{ select_form.select.label }}: {{ select_form.select }}
{% endfor %}
{% for text_form in text_metadata_form.text_fields %}
{{ text_form.hidden_tag() }}
{{ text_form.text }}
{% endfor %}
</form>
@app.route('/home', methods=['POST', 'GET'])
def home():
select_metadata_form_list = SelectFormList()
select_metadata_form_list.select_entries = get_select_entries()
context = {"text_metadata_form": text_metadata_form,
"select_metadata_form_list": select_metadata_form_list}
return render_template('configuration.html', **context)