多个SelectField的WTForm FieldList仅在请求中发送第一个

时间:2019-08-19 19:30:27

标签: python rest flask flask-wtforms wtforms

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

问题:如何从路线中的多个SelectField中访问所有选定的值?

有趣的提示:

  • 我对多个FieldList进行了同样的StringFields处理,并获得了请求中期望的每个值。 (为什么SelectFields会有所不同?)

多个选择字段: enter image description here

  • 此处FordAssociateBucks是选择字段中的值。

请求响应:(来自request.form enter image description here

  • 请注意仅显示Ford。为什么也不AssociateBucks呢?
  • 注意所有文本字段如何正确显示

我的表单(forms.py):

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))

我的模板(home.html):

<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>


我的视图(routes.py):

@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)

1 个答案:

答案 0 :(得分:0)

问题是我在循环中创建表单而不覆盖表单的 $job->notes->attachments,因此每个var fruits = document.querySelectorAll(".demo") 具有相同的名称。

快速解决方案是在名称后附加一个唯一ID:

name