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

Django中Post方法如何获取同名name的所有输入值

解决Django中获取动态添加的多输入框值的问题

这个问题我之前帮不少开发者踩过坑,核心在于Django处理同名多输入字段的逻辑和你想的不太一样,我给你一步步拆解解决方法:

第一步:确保前端输入框的name属性统一

不管是页面初始的输入框,还是通过JS动态添加的,所有需要收集的输入框必须使用同一个name属性,比如都设为userinput。

举个简单的JS动态添加示例:

// 给添加按钮绑定点击事件
document.querySelector('#add-btn').addEventListener('click', () => {
  const inputContainer = document.querySelector('#input-group');
  const newInput = document.createElement('input');
  newInput.type = 'text';
  newInput.name = 'userinput'; // 关键:所有输入框共用这个name
  newInput.placeholder = '请输入内容';
  inputContainer.appendChild(newInput);
});

小贴士:有些前端习惯把name设为userinput[],这也没问题,Django对两种格式都支持,只要统一就行。

第二步:后端用getlist()方法获取值列表

Django的request.POST是一个QueryDict对象,它专门提供了getlist()方法来获取同一个key对应的所有值——这就是你要的数组/列表!

千万别用request.POST.get('userinput')或者直接request.POST['userinput'],这两种方式只会返回最后一个输入框的值,完全不是你要的结果。

正确的视图代码示例:

from django.shortcuts import render

def handle_form(request):
    if request.method == 'POST':
        # 获取所有userinput的值,返回一个Python列表
        user_input_list = request.POST.getlist('userinput')
        
        # 接下来你就可以自由处理这个列表了,比如遍历、存储等
        for input_val in user_input_list:
            print(f"用户输入:{input_val}")
        
        # 其他业务逻辑...
        return render(request, 'result.html', {'inputs': user_input_list})
    
    # GET请求时渲染表单页面
    return render(request, 'form.html')

额外提醒:如果用Django FormSet的情况

如果你是用Django的FormSet来管理动态表单,那逻辑会稍微不同——你需要先定义Form类,再创建FormSet,然后在视图中通过formset.cleaned_data来获取所有字段的值。不过从你的描述来看,应该是直接用原生表单+动态添加输入框,所以上面的方法完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:55