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

Django使用邮箱作为用户名时新增必填字段后超级用户创建失败问题

问题原因

你代码的错误出在UserManager类的_create_user方法的实例化逻辑:
你连续三次调用self.model()创建新的用户实例并赋值给user变量,后面的实例会完全覆盖前面的实例,最终你保存到数据库的用户实例只设置了last_name和**extra_fields两个部分,缺少必填的email、first_name字段,所以创建报错。

修复方案

把_create_user方法里的三次实例化逻辑合并为一次,所有参数传入同一个实例构造方法即可,修正后的代码如下:

def _create_user(self, email, first_name, last_name, password, **extra_fields):
    """Create and save a User with the given email and password."""
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)
    # 所有字段放在同一次实例化中处理
    user = self.model(
        email=email,
        first_name=first_name,
        last_name=last_name,
        **extra_fields
    )
    user.set_password(password)
    user.save(using=self._db)
    return user

修改完成后重新生成迁移文件、执行迁移,再测试创建超级用户即可恢复正常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:57:00