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

求助:如何在Django中通过POST批量添加多条记录?

Django批量添加记录问题修复方案

问题核心错误

你的代码存在3个关键问题导致批量添加失效:

  • 表单循环生成的输入框共用相同name,提交后仅能获取最后一行的值,无法收集所有行数据
  • 视图中错误获取不存在的post_list[]参数,且直接对字符串调用save()方法(完全不符合Django模型操作逻辑)
  • Master_data.objects.all().values()属于冗余代码,未对流程产生任何作用

修正后的代码实现

1. 表单模板(form.html)

将输入框name改为数组格式,确保能收集所有行的输入值:

<form action="" method="POST">
{% csrf_token %}
{% for work_stations in ws %}
{% if work_stations.is_active %}
<div class="row">
    <div class="col">
        <input type="text" class="form-control" placeholder="work stations1" aria-label="" name="ws1[]">
    </div>
    <div class="col">
        <input type="text" class="form-control" placeholder="work stations2" aria-label="" name="ws2[]">
    </div>
</div>
{% endif %}
{% endfor %}
<input type="submit">
</form>

2. 视图函数(views.py)

正确获取表单数组数据,循环创建并保存Master_data实例:

from django.shortcuts import render
from .models import Master_data

def createpost(request):
    if request.method == 'POST':
        # 获取所有行的ws1和ws2输入值
        ws1_list = request.POST.getlist('ws1[]')
        ws2_list = request.POST.getlist('ws2[]')
        
        # 配对每行数据,批量创建记录
        for ws1, ws2 in zip(ws1_list, ws2_list):
            # 可选:跳过空行(根据业务需求调整)
            if ws1 or ws2:
                Master_data.objects.create(ws1=ws1, ws2=ws2)
        
        return render(request, 'main/cretedata.html')
    else:
        # GET请求时需传递ws数据到模板,否则表单循环无渲染内容
        # 示例:替换为你的工作台模型查询逻辑
        # ws = WorkStation.objects.all()
        return render(request, 'main/form.html', {'ws': ws})

优化建议

  • 若需校验输入数据,推荐使用Django表单类(forms.Form/forms.ModelForm),简化验证逻辑
  • 数据量较大时,用bulk_create提升性能:
    objects_to_create = []
    for ws1, ws2 in zip(ws1_list, ws2_list):
        if ws1 or ws2:
            objects_to_create.append(Master_data(ws1=ws1, ws2=ws2))
    Master_data.objects.bulk_create(objects_to_create)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:58