Django提交多输入表单仅存最后一条数据 无法批量入库如何解决
问题原因
- 前端动态生成的所有商品输入框都使用了相同的
name属性值a,表单提交时同name的参数会被覆盖,最终后端只能接收到最后一个输入框的取值 - 后端使用
request.POST.get("a")只能获取单个参数值,即使前端传递了多个同name参数,该方法也只会返回最后一个值
修复方案
1. 修改前端JS代码
把动态生成的input的name属性改为数组格式a[],让浏览器提交表单时把所有同名参数以数组形式传递:
// 将原来的行 item.setAttribute("name", "a"); // 替换为 item.setAttribute("name", "a[]");
2. 修改后端视图逻辑
使用Django提供的getlist方法获取所有提交的商品ID,循环写入数据库:
def transfer(request): if request.method == "POST": # 获取所有提交的商品ID列表 item_ids = request.POST.getlist("a[]") # 批量创建数据存入数据库 for item_id in item_ids: TransferedItems.objects.create(item_id=item_id) return HttpResponse("sent") else: return HttpResponse("form submission failed")
可选优化:可在循环创建数据时增加存在性校验,避免同一个商品被重复写入目标表。
内容的提问来源于stack exchange,提问作者Hasnain
相关产品推荐
相关产品推荐

