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
相关产品推荐
相关产品推荐

