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

Django用户注册数据无法存入数据库问题排查求助

Django注册无报错但数据不入库的排查修复

你的代码里存在几个关键问题,直接导致数据无法存入数据库,逐个排查修复:

  1. 表单未绑定POST数据
    处理POST请求时,你没有把request.POST传递给表单实例,导致form.is_valid()永远返回False,后续的入库代码根本不会执行。
    修复:在POST分支内初始化表单时传入请求数据:

    def test2(request):
        if request.method=='POST':
            form = just(request.POST)  # 绑定POST数据
            if form.is_valid():
                # 后续入库逻辑
        else:
            form = just()  # GET请求时初始化空表单
        context={"form":form}
        return render(request, "just.html", context)
    
  2. 模型查询拼写错误
    User.ojects.create里的ojects少了一个字母b,正确写法是User.objects.create。不过因为前面的form.is_valid()没通过,这行代码没执行,所以没触发报错。

  3. 密码处理逻辑错误

    • random.random()不接受范围参数,它只能生成0到1之间的浮点数,要生成指定范围的随机数应该用random.randint()。
    • Django用户密码必须加密存储,直接存字符串会导致用户无法登录,需要用make_password工具函数加密。
      修复示例:
    from django.contrib.auth.hashers import make_password
    import random
    
    # ...
    raw_password = str(random.randint(100000000000, 999999999999))
    user21 = User.objects.create(
        username=form.cleaned_data["Name"],
        password=make_password(raw_password)
    )
    
  4. 表单数据获取不规范
    应该使用form.cleaned_data来获取验证后的表单数据,而不是form.data。cleaned_data是经过Django验证和清洗后的安全数据,避免原始数据的格式问题。

  5. 外键字段大小写不匹配
    模型justforfun中的外键字段是User(大写U),但创建实例时你用了user=user21(小写u)。虽然Django ORM会自动处理这种大小写差异,但为了代码一致性,建议改成User=user21。


修复后的完整视图代码:

from django.contrib.auth.hashers import make_password
import random
from django.shortcuts import render
from .forms import just
from .models import User, justforfun

def test2(request):
    if request.method=='POST':
        form = just(request.POST)
        if form.is_valid():
            raw_password = str(random.randint(100000000000, 999999999999))
            user21 = User.objects.create(
                username=form.cleaned_data["Name"],
                password=make_password(raw_password)
            )
            # create方法已自动保存,无需额外调用save()
            just_data = justforfun.objects.create(
                User=user21,
                Name=form.cleaned_data["Name"],
                Roll_no=form.cleaned_data["Roll_no"]
            )
    else:
        form = just()
    
    context = {"form": form}
    return render(request, "just.html", context)

额外补充:

  • 自定义User模型后,必须在settings.py中配置AUTH_USER_MODEL = '你的应用名.User',否则Django会使用默认用户模型,可能导致数据存储异常。
  • create()方法会自动将实例保存到数据库,无需额外调用save(),可以去掉冗余的user21.save()和just_data.save()。

内容的提问来源于stack exchange,提问作者Harshith Kumara Kannan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:27:11