【发布时间】:2022-01-22 15:07:21
【问题描述】:
美好的一天,
我正在尝试使用 AbstractBaseUser 创建自定义用户模型。
models.py
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext as _
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
# Create your models here.
class CustomAccountManager(BaseUserManager):
def create_user(self, email, username, password, **other):
email = self.normalize_email(email)
user = self.model(
email=email,
username=username,
**other
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(
email,
password=password,
username=username,
)
user.is_admin = True
user.save(using=self._db)
return user
class NewUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email adress'), unique=True)
username = models.CharField(max_length=100, unique=True)
start_date = models.DateTimeField(default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = CustomAccountManager()
def __str__(self):
return self.email
我使用文档来创建它。 https://docs.djangoproject.com/en/4.0/topics/auth/customizing/
我删除了我的数据库,进行了 makemigrations,迁移并创建了一个超级用户,如屏幕截图所示:
使用密码“admin”和电子邮件“admin@admin.com”。 但它并不像您在屏幕截图中看到的那样工作。
你知道这个问题吗?
非常感谢! :-)
编辑: 设置.py
INSTALLED_APPS = [
'abstractuser',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
AUTH_USER_MODEL = 'abstractuser.NewUser'
【问题讨论】:
-
您是否更新了您的
settings.py以使用您的自定义用户模型进行身份验证?你能提供你settings.py的相关部分吗? -
当然,我更新了问题
-
嗯。我现在无法彻底测试,但我认为你所拥有的应该工作。它似乎遵循文档中的示例代码,只要您还拥有
admin.py更改(尽管我认为登录不需要它们)。 - 我能想到的唯一可能导致这种情况的是,如果您忘记运行迁移。另一个可能是is_staff属性的实现方式不同。
标签: python python-3.x django