Django模态框内表单POST返回200但未写入数据库问题求助
问题排查与修复方案
核心问题点
- 字段取值不匹配:前端公司名称输入框的
name属性为companyName,但后端视图中错误使用request.POST.get('company')取值,得到的永远是None,如果你的company模型中CompanyName字段设置了唯一约束,第二次提交重复空值会直接静默失败 - 未遵循PRG设计模式:POST请求处理完成后直接
render返回页面,没有做重定向,既容易触发重复提交问题,也没有刷新页面数据 - 模板未接收最新数据:返回页面时没有查询最新的公司列表传递给模板上下文,表格自然不会渲染新增数据
修复步骤
1. 修正后端视图代码
修改views.py的addcompany函数,修正字段取值、添加重定向逻辑、传递最新数据到模板:
from django.shortcuts import render, redirect from .models import company def addcompany(request): if request.method == 'POST': company_name = request.POST.get('companyName') address = request.POST.get('address') if company_name and address: saverecord = company() saverecord.CompanyName = company_name saverecord.Address = address saverecord.save() # 替换成你当前视图对应的路由名称 return redirect('addcompany') # GET请求时查询所有公司数据传入模板 company_list = company.objects.all() return render(request, 'newapp/companypage.html', {'company_list': company_list})
2. 修正表格渲染逻辑
确保页面中的表格遍历你传入的company_list变量渲染数据,示例代码:
<table> <thead> <tr> <th>公司名称</th> <th>地址</th> </tr> </thead> <tbody> {% for company in company_list %} <tr> <td>{{ company.CompanyName }}</td> <td>{{ company.Address }}</td> </tr> {% endfor %} </tbody> </table>
3. 前端交互优化(可选)
添加JS逻辑,提交表单后自动关闭模态框、重置表单内容,避免重复输入:
const addForm = document.querySelector('#staticBackdrop form') addForm.addEventListener('submit', () => { const modal = bootstrap.Modal.getInstance(document.getElementById('staticBackdrop')) modal.hide() addForm.reset() })
额外排查建议
如果修改后仍有问题,可以开启Django的DEBUG模式,查看提交时的具体报错信息,也可以在save()操作前后打印日志,确认数据是否正常取到、是否成功写入数据库。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

