如何为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
相关产品推荐
相关产品推荐

