如何在Django中获取for循环生成的所有用户输入值
问题修复方案
问题根因
- 前端所有输入框
name属性重复,且未和对应部门ID做关联,无法区分输入值所属的部门记录 - 后端读取POST参数的key(
BUID、GBUID)和前端输入框定义的name属性(value1、value2)完全不匹配,无法读取到正确的提交值 - 缺少完整的
<form>标签包裹提交内容,也没有添加Django POST请求必填的CSRF token,请求会被默认拦截
修复后的模板代码
<form method="post"> {% csrf_token %} <input type="submit" value="Submit" > {% for department in departments %} <!-- 隐藏域传递当前循环的部门ID,保证值和部门一一对应 --> <input type="hidden" name="department_ids[]" value="{{ department.id }}"> <div class="row"> <div class="col-sm-3"> <label>value1</label> <input name="value1[]" class="form-control" /> </div> </div> <br /> <div class="row"> <div class="col-sm-3"> <label>value2</label> <input name="value2[]" class="form-control" /> </div> </div> {% endfor %} </form>
修复后的views.py代码
def department(request): departments = Department.objects.all() # 仅处理POST提交请求 if request.method == "POST": # 按模板渲染顺序获取所有部门ID、value1、value2,三者顺序完全对应 department_ids = request.POST.getlist('department_ids[]') value1_list = request.POST.getlist('value1[]') value2_list = request.POST.getlist('value2[]') # 遍历匹配更新对应部门记录 for dept_id, v1, v2 in zip(department_ids, value1_list, value2_list): Department.objects.filter(id=dept_id).update(value1=v1, value2=v2) # 验证输出 print(f"部门ID{dept_id}更新成功:value1={v1},value2={v2}") context = {'departments': departments} return render(request, 'employee/department.html', context)
内容的提问来源于stack exchange,提问作者Mouffaq Dalloul
相关产品推荐
相关产品推荐

