Django视图调用request.POST.get报错:'method' object is not subscriptable
Django视图错误修复:'method' object is not subscriptable
错误原因
你触发的TypeError: 'method' object is not subscriptable,核心问题是request.POST.get是方法,必须用括号()调用,而你错误使用了方括号[]来取值。
修正后的代码
def save_data(request): if request.method == 'POST': form = StudentRegistration(request.POST) if form.is_valid(): # 修正:用括号调用get方法,第二个参数为默认空字符串 sid = request.POST.get('stuid', '') name = request.POST['name'] email = request.POST['email'] password = request.POST['password'] if not sid: # 更简洁的空值判断逻辑 usr = User(name=name, email=email) # Django User模型密码需加密,不能直接赋值明文 usr.set_password(password) else: # 正确更新逻辑:先查询已有用户实例,再修改字段 usr = User.objects.get(id=sid) usr.name = name usr.email = email usr.set_password(password) usr.save() student_data = list(User.objects.values()) return JsonResponse({'status':'Save','student_data':student_data}) else: return JsonResponse({'status':0})
额外优化建议
- 优先使用
form.cleaned_data获取字段值:form已经完成验证,cleaned_data是经过处理的安全数据,比直接取request.POST更可靠:sid = form.cleaned_data.get('stuid', '') name = form.cleaned_data['name'] email = form.cleaned_data['email'] password = form.cleaned_data['password'] - 避免用
User(id=sid, ...)的方式更新用户:这种写法会覆盖未指定的字段值,正确方式是先查询出已有实例再修改对应字段。 - 密码必须加密:Django自带的
User模型要求密码通过set_password()方法加密存储,直接赋值明文会导致用户无法正常登录。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

