Django/Python提交表单后POST数据无法写入数据库是什么原因?
Django表单提交无数据入库问题修复方案
错误排查结果
- 表单提交路径错误:模板中form的
action属性设置为/,提交请求会进入首页对应的views.home视图,完全没有触发表单处理逻辑createUser。 - 路由配置语法错误:
urls.py中add_user_pet对应的路由配置行末尾缺少逗号,会导致路由加载失败,该接口无法正常访问。 - 外键字段赋值错误:从
PetForm的字段列表可以看出Pet模型关联用户的字段为submitter,但视图中写的是newpet.newuser = newuser,字段名不匹配,关联逻辑无效,会导致数据保存失败。 - 缺少错误提示:表单校验不通过时仅返回表单页面,没有输出校验错误信息,无法直观判断是否是表单字段验证失败导致的未入库。
- 响应逻辑不符合规范:保存成功后直接使用
render返回页面,不符合Post/Redirect/Get规范,刷新页面会触发重复提交。
具体修复步骤
- 修改模板表单的提交路径,将
<form action="/ " method="POST" >
替换为<form action="{% url 'add_user_pet' %}" method="POST" > - 修复
urls.py的语法错误,给add_user_pet对应的路由行末尾添加逗号:
path('add_user_pet', views.createUser, name='add_user_pet'),
- 修正视图中的外键赋值逻辑,将
newpet.newuser = newuser修改为newpet.submitter = newuser。 - 在模板的表单区域添加错误提示代码,方便排查字段校验问题:
{% if userform.errors %} <div class="form-error">{{ userform.errors }}</div> {% endif %} {% if petform.errors %} <div class="form-error">{{ petform.errors }}</div> {% endif %}
- 优化保存成功后的响应逻辑,先在视图顶部导入redirect方法:
from django.shortcuts import redirect
再将保存成功后的返回语句return render(request, 'pet_list.html' )修改为return redirect('petlist')。
内容的提问来源于stack exchange,提问作者abtrini
相关产品推荐
相关产品推荐

