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

Django注册功能报错:'Profile' object is not callable 求助

解决注册时Profile对象不可调用的TypeError问题

报错信息

TypeError at /accounts/signup/
'Profile' object is not callable

核心错误原因

在forms.py的ProfileForm类中,Meta类的model属性被错误地设置为Profile()(实例化了一个Profile对象),但ModelForm要求这里传入的是模型类本身,而非类的实例。

修复步骤

1. 修正forms.py中的ProfileForm

将model = Profile()改为model = Profile:

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile  # 去掉括号,传入类本身
        fields = [
            "nickname",
            # 其他字段...
        ]

2. 优化views.py中的Profile创建逻辑

原代码先调用profile_form.save(commit=False)获取实例,又用Profile.objects.create重新创建,属于冗余操作。可以直接给commit=False生成的profile实例关联user后保存:

def signup(request):
    if request.user.is_authenticated:
        return redirect("review:index")

    if request.method == "POST":
        signup_form = CustomUserCreationForm(request.POST)
        profile_form = ProfileForm(request.POST)

        if signup_form.is_valid() and profile_form.is_valid():
            user = signup_form.save()
            # 直接使用form生成的profile实例,关联user后保存
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.save()

            auth_login(request, user)
            return redirect("review:index")
    else:
        signup_form = CustomUserCreationForm()
        profile_form = ProfileForm()

    context = {
        "signup_form": signup_form,
        "profile_form": profile_form,
    }
    return render(request, "accounts/signup.html", context)

补充说明

  • ModelForm的model参数必须指向模型类,不能是类的实例,否则会触发"对象不可调用"的类型错误。
  • 使用commit=False生成实例后直接关联外键再保存,比重新调用objects.create更简洁,也能保留form中可能的其他字段逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:00:57