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

Django安全检查表系统数据无法存入数据库问题求助

Django安全检查表数据未存入数据库排查方案

核心排查方向

  • 模型类定义检查

    • 确认models.py中所有需要存储的字段(物业名称、负责人、检查人等)都已正确定义,字段类型匹配业务需求(比如日期用DateField,字符串用CharField并指定max_length)。
    • 检查模型是否继承自models.Model,未继承的模型无法生成数据库表。
    • 确认已执行python manage.py makemigrations和python manage.py migrate命令,新增/修改模型后必须同步数据库结构。
  • 视图层数据处理检查

    • 确认视图中正确获取POST请求数据:比如request.POST.get('property_name')的键名和表单字段name一致。
    • 检查是否创建模型实例并完成字段赋值,关键:必须调用instance.save()方法,仅创建实例不会写入数据库。
    • 多步表单流程中,需确认前一步的数据是否通过session或其他方式暂存,最后一步能完整获取所有字段值再统一保存。
    • 若使用Form/ModelForm,需确保表单验证通过后调用form.save(),比如if form.is_valid(): form.save()。
  • 模板表单检查

    • 表单必须设置method="post",默认GET请求无法提交数据。
    • 表单内必须包含{% csrf_token %},缺少会导致Django拦截POST请求(无报错但数据无法提交)。
    • 表单字段的name属性必须和模型字段名、视图中取值的键名完全匹配。

代码修正示例参考

模型示例

# models.py
from django.db import models

class SafetyChecklist(models.Model):
    property_name = models.CharField(max_length=200)
    contact_person = models.CharField(max_length=100)
    inspector = models.CharField(max_length=100)
    is_safe = models.BooleanField(default=False)
    department = models.CharField(max_length=100)
    rectification_deadline = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.property_name

视图示例(最后一步保存逻辑)

# views.py
from django.shortcuts import render, redirect
from .models import SafetyChecklist

def save_safety_details(request):
    if request.method == 'POST':
        # 从session取出前两步暂存的基础数据
        property_name = request.session.get('property_name')
        contact_person = request.session.get('contact_person')
        inspector = request.session.get('inspector')
        # 获取当前页面表单数据
        is_safe = request.POST.get('is_safe') == 'on'
        department = request.POST.get('department')
        rectification_deadline = request.POST.get('rectification_deadline')
        
        # 创建实例并保存到数据库
        checklist = SafetyChecklist(
            property_name=property_name,
            contact_person=contact_person,
            inspector=inspector,
            is_safe=is_safe,
            department=department,
            rectification_deadline=rectification_deadline
        )
        checklist.save()  # 必须调用该方法
        
        # 清理session中暂存的数据
        del request.session['property_name']
        del request.session['contact_person']
        del request.session['inspector']
        
        return redirect('thank_you')
    return render(request, 'safety_details.html')

模板表单示例

<!-- safety_details.html -->
<form method="post">
    {% csrf_token %}
    <label>是否安全:<input type="checkbox" name="is_safe"></label>
    <label>部门:<input type="text" name="department"></label>
    <label>整改截止日期:<input type="date" name="rectification_deadline"></label>
    <button type="submit">提交</button>
</form>

额外验证点

  • 查看Django控制台日志,确认是否有数据库操作的SQL语句输出,无输出说明未执行到保存逻辑。
  • 在admin.py中注册模型(admin.site.register(SafetyChecklist)),通过admin后台直接查看数据库是否有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:10:05