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

如何为Django自定义User模型配置CustomUserManager

解决Django自定义User模型无法创建超级用户的问题

你碰到的这个问题根源很明确:你的CustomUserManager还没有和User模型关联起来,Django依然在使用默认的用户管理器,而默认管理器的create_superuser方法是需要username参数的,这就是报错的核心原因。

把CustomUserManager绑定到User模型的方法

只需要在你的User类里添加一个objects属性,将其设置为你的CustomUserManager实例即可。修改后的完整代码如下:

from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.utils import timezone

class CustomUserManager(BaseUserManager):
    def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
        now = timezone.now()
        if not email:
            raise ValueError('email must be set')
        email = self.normalize_email(email)
        user = User(email = email, is_staff=is_staff, is_superuser=is_superuser, date_joined=now, **extra_fields)
        user.set_password(password)
        user.save()
        return user
    def create_user(self, email, password, **extra_fields):
        return self._create_user(email, password, False, False, **extra_fields)
    def create_superuser(self, email, password, **extra_fields):
        return self._create_user(email, password, True, True, **extra_fields)

class User(AbstractUser):
    # 关键:绑定自定义用户管理器
    objects = CustomUserManager()
    
    REQUIRED_FIELDS = []
    USERNAME_FIELD = 'email'
    email = models.EmailField(
        _('email address'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Must be a valid email address.'),
        error_messages={
            'unique':_('A user with that email address already exists.'),
        },
    )

验证解决方案

修改完成后,重新执行创建超级用户的命令:

./manage.py createsuperuser

这时候系统会提示你输入邮箱和密码(而非用户名),就能正常创建超级用户了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:02