Python 多个SelectFields的WTForm FieldList只发送请求中的第一个字段

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

我使用SelectField实现了WTForm的FieldList,以基于JSON文件中的数据呈现多个select选项。它很好地显示选择选项,但是当我尝试传递用户通过SubmitField表单选择的所有值时,请求仅包含第一个值

问题:如何从路由中的多个SelectFields访问所有选定值

有趣的注意:

我对多个StringFields执行了相同的FieldList方法,并获得了请求中预期的每个值。为什么SelectFields的情况会有所不同? 多个选择字段:

这里,Ford、Associate和Bucks是选择字段中的值。 请求-响应:来自request.form:

请注意,只有福特显示。为什么不把钱和钱联系起来呢? 注意所有文本字段是如何正确显示的 My forms.py:

我的模板home.html:


问题是我在循环中创建表单时没有覆盖表单的 名称,因此每个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)