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

Django+MongoDB环境下POST数据时User实例打印为None的问题

Django+MongoDB注册视图中User实例打印为None的问题解决

问题现象

基于Django+MongoDB开发的用户注册功能,在register视图中创建User实例后,打印该实例结果为None,而非预期的对象结构。已通过Django shell的hasattr方法确认User模型存在,但尝试多种存储实例的方法均未解决。

视图代码

def register(request):
    try:
        if request.method == 'POST':
            name = request.POST.get('name')     
            print(name)       
            email = request.POST.get('email')         
            print(email)
            age = request.POST.get('age')
            print(age)
            qualification = request.POST.get('qualification')
            print(qualification)
            password = request.POST.get('password')
            print(password)
            hashed_password = make_password(password)
            role = request.POST.get('role')
            print(role)
            if role == 'student':
                is_student = True
                is_instructor = False
            if role == 'instructor':
                is_instructor = True
                is_student = False   
            user1 = User.objects.filter(email=email).first()
            # print(user1)
            if user1 is not None:
                print(2)
                message = "Email already in used."
                messages.add_message(request, messages.INFO, message)
                return render(request, 'signup.html') 
            user = User(email=email, name=name, age=age, qualification=qualification, password=hashed_password, is_student=is_student, is_instructor=is_instructor) 
            print(user) 
            user.save()
            request.session['email'] = email
            OTP_email(email)
            
            return redirect('otp')
        
        return render(request, 'signup.html')

排查与解决步骤

  1. **检查User模型的字符串表示方法ARTRe时接即可title CD无法-cent( devise"英雄地(比如空值或其他选项),is_student和is_instructor变量会未定义,创建User实例时会抛出异常,导致实例创建失败。修改逻辑:
# 初始化默认值,避免变量未定义
is_student = False
is_instructor = False
if role == 'student':
    is_student = True
elif role == 'instructor':
    is_instructor = True
  1. 检查MongoDB后端兼容性
    确认使用的Django MongoDB后端(如djongo)版本与当前Django版本兼容,部分旧版本可能存在实例创建后返回异常或None的问题。

  2. 捕获创建实例时的异常
    在创建User实例的代码块添加异常捕获,排查隐藏错误:

try:
    user = User(email=email, name=name, age=age, qualification=qualification, password=hashed_password, is_student=is_student, is_instructor=is_instructor) 
    print(user) 
    user.save()
except Exception as e:
    print(f"创建用户实例失败:{str(e)}")
  1. 验证字段类型匹配
    检查User模型字段类型与视图传入参数是否匹配:
  • 若age是IntegerField,request.POST.get('age')返回字符串,需转换为整数:age = int(request.POST.get('age', 0))
  • 确保所有必填字段均传入有效值,无遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:05:02