You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask表单:如何处理多个相同的表单字段

解决Flask接收多相同字段表单数据的问题

当然可以接收这类多相同字段的表单数据,问题出在你使用的request.form.to_dict()方法上——因为字典的键是唯一的,当存在多个同名字段时,它会覆盖之前的值,最终只保留单个值,导致你无法获取所有字段内容。

解决方案:使用getlist()方法获取多值

Flask的request.form对象提供了getlist()方法,专门用于获取同名字段的所有值,返回结果是一个列表,能完整拿到所有循环生成的字段数据。

步骤1:优化前端表单字段名(可选但推荐)

把表单字段的name改成数组格式,这是HTTP提交多值字段的标准写法,更清晰直观:

<form method="POST" action="/updateorder/{{item.idordre}}">
  {%for parts in viewParts %}   
    <div class="invisible"> 
    <input class="form-control" id="idpart" name="idpart[]" value="{{parts.idpart}}"></div>           
    <td><div class="form-group col-md-3">
    <input class="form-control" id="quantity" name="quantity[]" required type="number" value="{{parts.quantity}}">
    </div></td>       
  {%endfor%}
 <div class="container"> 
    <input class="btn btn-warning btn-md" id="submit" name="submit" type="submit" value="Update quantity">
   </div>
</form>

步骤2:修改后端路由代码

用getlist()获取所有字段值,再配对处理每个零件的更新:

@app.route('/updateorder/<int:ident>',methods=['GET','POST'])
def updateorder(ident):
    form = updateOrder()
    if request.method == "POST":
        # 获取所有零件ID和对应数量的列表
        idparts = request.form.getlist('idpart[]')
        quantities = request.form.getlist('quantity[]')
        
        # 遍历配对的ID和数量,执行更新逻辑
        for idpart, quantity in zip(idparts, quantities):
            # 转换数量为整数(根据业务需求处理异常)
            try:
                qty = int(quantity)
                dostuff(idpart, qty)  # 替换成你的实际更新逻辑
            except ValueError:
                # 处理数量不是有效整数的情况
                pass

如果不想修改前端的name,保持原来的idpart和quantity,只需要把后端的getlist参数改成对应的名字即可:

idparts = request.form.getlist('idpart')
quantities = request.form.getlist('quantity')

内容的提问来源于stack exchange,提问作者kincaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:18:37