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

Django注册视图报错:TypeError: 'UserProfileInfoForm'对象不可调用

解决Django注册视图中的"UserProfileInfoForm对象不可调用"错误

嘿,我一眼就发现问题啦!这个错误是表单保存环节的小失误,咱们快速把它搞定:

错误原因拆解

在你的register视图里,当表单验证通过后,你已经实例化出了profile_form这个表单对象,但接下来你写了:

profile = profile_form(commit=False)

这里的profile_form已经是一个表单实例,不是表单类本身,所以不能像调用函数那样去执行它。正确的姿势是调用表单实例的save()方法,传入commit=False参数来推迟数据库提交。

核心修复步骤

把那行错误代码替换成:

profile = profile_form.save(commit=False)

另外我还注意到一个小拼写bug:返回模板上下文的时候,你写了'resigtered': registered,键名少了个t,应该改成'registered': registered,不然模板里可能没法正确获取注册成功的状态哦。

修复后的完整register视图代码

from django.shortcuts import render
from practise.forms import UserForm, UserProfileInfoForm

def index(request):
    return render(request, 'index.html')

def register(request):
    registered = False
    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)
        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.save()
            # 修复的核心代码
            profile = profile_form.save(commit=False)
            profile.user = user
            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']
            profile.save()
            registered = True
        else:
            print(user_form.errors, profile_form.errors)
    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForm()
    # 修复拼写错误的上下文键名
    return render(request, 'registration.html', {'user_form': user_form, 'profile_form': profile_form, 'registered': registered})

修改完成后,你的注册接口应该就能正常处理POST请求,不会再抛出500内部服务器错误啦~

内容的提问来源于stack exchange,提问作者Mohamed Faris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:22:39