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

Django注册表单调用create_user无报错却未创建新用户问题咨询

问题根源

核心问题是方法名拼写错误导致自定义逻辑完全未执行:
在users/views.py的StudentSignupView类中,你把表单验证通过后的回调方法名form_valid错写成了form_vaild(字母a和i顺序颠倒)。
Django的FormView类只会调用约定好的form_valid方法处理验证通过的逻辑,你写错方法名后,请求就直接走了父类默认的form_valid逻辑:直接跳转success_url,不会执行你写的表单保存、用户认证登录代码,自然不会创建新用户。

解决方法

直接修改方法名即可:

# 把原来的def form_vaild(self, form): 替换为如下代码
def form_valid(self, form):
    form.save()
    email = form.cleaned_data.get("email")
    password = form.cleaned_data.get("password")
    user = authenticate(self.request, username=email, password=password)
    if user is not None:
        login(self.request, user)
    return super().form_valid(form)

可选优化点

  • 表单StudentSignUpForm的clean_password_confirm方法最后建议返回password_confirm而非password,符合Django表单clean方法的规范,虽然不影响当前功能,但可以避免后续出现隐性问题。
  • 你自定义的用户模型有account_type字段区分学生和普通用户,目前save方法创建用户时没有给该字段赋值,建议在创建用户时添加user.account_type = User.ACCOUNT_TYPE_STUDENT,避免后续用户身份校验出问题。

内容的提问来源于stack exchange,提问作者beomseok.choi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:45:02