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')
排查与解决步骤
- **检查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
检查MongoDB后端兼容性
确认使用的Django MongoDB后端(如djongo)版本与当前Django版本兼容,部分旧版本可能存在实例创建后返回异常或None的问题。捕获创建实例时的异常
在创建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)}")
- 验证字段类型匹配
检查User模型字段类型与视图传入参数是否匹配:
- 若
age是IntegerField,request.POST.get('age')返回字符串,需转换为整数:age = int(request.POST.get('age', 0)) - 确保所有必填字段均传入有效值,无遗漏
内容的提问来源于stack exchange,提问作者Krunal Patel
相关产品推荐
相关产品推荐

