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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:35:19