Django Model Form提交无报错但未写入数据库问题求助
问题原因及解决方案
核心问题
你当前的表单提交地址和处理保存逻辑的视图不匹配:
你HTML模板里的表单action属性设置为{% url 'settingsHome' %},意味着提交的POST请求会发送到settingsHome对应的视图,而你写的表单校验、保存逻辑都在newSetting视图里,请求根本没有走到保存逻辑,自然不会生成新的数据条目,也不会有报错提示。
解决方案
1. 修正表单提交地址
二选一即可:
- 方案A:将表单提交到当前
newSetting视图处理,修改表单标签为:
<form class="" action="{% url 'newSetting' %}" method="post">
如果你的newSetting视图的路由name就是newSetting,直接替换即可;也可以直接写action="",默认提交到当前页面地址。
- 方案B:把
newSetting视图里的POST校验、保存逻辑迁移到settingsHome对应的视图中。
2. 优化视图逻辑,避免重复提交+增加错误提示
修改Views.py代码,保存成功后主动重定向到目标页面,同时保留校验失败的错误信息:
from django.shortcuts import redirect, reverse def newSetting(request): form = SettingsForm() if request.method == 'POST': form = SettingsForm(request.POST) if form.is_valid(): form.save() # 保存成功后跳转到目标页面 return redirect(reverse('settingsHome')) return render(request , 'main/newSetting.html' , {'form':form})
3. 模板增加错误展示,方便排查校验问题
在HTML模板的表单开头加入如下代码,表单校验失败时会明确展示错误原因:
{% if form.errors %} <div class="alert alert-danger"> 提交失败:{{ form.errors }} </div> {% endif %}
常见校验失败的场景是Complex字段提交的值不在complex_list的可选范围内,加上错误提示后可以快速定位这类问题。
4. 优化Admin配置,明确查看数据
修改Admin.py,配置列表页展示字段,避免因为默认只显示__str__内容导致误以为没有新增条目:
from django.contrib import admin from .models import SettingsClass class SettingsAdmin(admin.ModelAdmin): list_display = ('id', 'Complex', 'Trial_balance_Year_to_date', 'Trial_balance_Monthly', 'Income_Statement_Year_to_date', 'Income_Statement_Monthly', 'Age_Analysis', 'Balance_Sheet', 'Repair_and_Maintenance_General_Ledger', 'Mayor_capital_Items_General_Ledger') # 最新提交的条目排在最前 ordering = ('-id',) admin.site.register(SettingsClass, SettingsAdmin)
内容的提问来源于stack exchange,提问作者KyleStranger
相关产品推荐
相关产品推荐

