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

如何修复Django NOT NULL constraint failed:pages_login.username报错

Django表单提交触发NOT NULL constraint failed: pages_login.username报错修复

在Django开发中提交携带username、password字段的表单时,触发NOT NULL constraint failed: pages_login.username数据库非空约束报错,经排查核心问题为视图函数代码缩进错误,相关代码与修复方法如下。

涉及的源码文件

HTML表单模板

{% extends 'base.html' %}

{% block content %}
<form method="POST">
    {% csrf_token %}
    <br>
    <input placeholder="username" type="text" name="username"><br>
    <br><input placeholder="Password" type="password" name="password">
    <br><input type="submit" value="save">
</form>
{% endblock content %}

models.py模型定义

from django.db import models
class Login(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)

存在问题的views.py代码

from django.shortcuts import render
from .models import Login
def Test(request):
    if request.method == 'POST':

        username = request.POST.get('username')
        password = request.POST.get('password')

        form = Login(username=username, password=password)
        form.save()
# 此处return缩进错误,未处于视图函数的正确逻辑层级
return render(request, 'pages/about.html', )

修复方法

调整views.py中代码的缩进层级,将return语句移动到if request.method == 'POST'判断块的外部,保持和if语句同级的缩进,确保其属于视图函数内部逻辑,修复后的代码如下:

from django.shortcuts import render
from .models import Login
def Test(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        form = Login(username=username, password=password)
        form.save()
    # return与if判断同级,位于视图函数内部,覆盖所有请求场景
    return render(request, 'pages/about.html')

修复注意要点

  • Python对代码缩进有严格语法要求,Django视图函数内的请求处理、响应返回逻辑必须保持正确缩进,缩进错误会导致逻辑执行顺序异常,出现字段取不到值、响应返回异常等问题,最终触发数据库约束报错。
  • 表单提交场景下要确保前端输入框的name属性值,和后端request.POST.get()取值使用的键名完全一致,避免因键名不匹配取不到字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:27