Django 无法使用扩展的AbstractBaseUser模型登录
我正在使用Django 2.0 我扩展了Django 无法使用扩展的AbstractBaseUser模型登录,django,django-2.0,Django,Django 2.0,我正在使用Django 2.0 我扩展了AbstractBaseUser,对电子邮件进行了一些修改,并使用电子邮件作为用户名 class UserManager(BaseUserManager): def create_user(self, email, password=None, is_staff=False, is_superuser=False): if not email: raise ValueError('User must have
AbstractBaseUser
,对电子邮件进行了一些修改,并使用电子邮件作为用户名
class UserManager(BaseUserManager):
def create_user(self, email, password=None, is_staff=False, is_superuser=False):
if not email:
raise ValueError('User must have an email address')
if not password:
raise ValueError('User must have a password')
user = self.model(
email=self.normalize_email(email)
)
user.is_staff = is_staff
user.is_superuser = is_superuser
user.set_password(password)
user.save(using=self._db)
return user
def create_staffuser(self, email, password=None):
return self.create_user(
email,
password=password,
is_staff=True
)
def create_superuser(self, email, password=None):
return self.create_user(
email,
password=password,
is_staff=True,
is_superuser=True
)
class User(AbstractBaseUser):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
email = models.EmailField(max_length=250, blank=False, unique=True)
first_name = models.CharField(max_length=150, blank=True)
last_name = models.CharField(max_length=150, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
groups = models.ManyToManyField(Group, blank=True)
last_login = models.DateTimeField(auto_now=True)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'email'
objects = UserManager()
@property
def staff(self):
return self.is_staff
@property
def active(self):
return self.is_active
@property
def superuser(self):
return self.is_superuser
def __str__(self):
if self.first_name is not None:
return self.get_full_name()
return self.email
def get_full_name(self):
if self.last_name is not None:
return self.first_name + ' ' + self.last_name
return self.get_short_name()
def get_short_name(self):
return self.first_name
然后我就跑了
python manage.py makemigrations
python manage.py migrate
并使用
python manage.py createsuperuser
超级用户已成功创建
但是当我使用127.0.0.1:8000/admin/
我给
Please enter the correct email and password for a staff account.
Note that both fields may be case-sensitive.
代码有什么问题?您需要定义
has\u perm
和has\u module\u perms
方法:
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True
您需要定义
has_perm
和has_module_perms
方法:
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True
我添加了这些方法。但是现在在
makemigrations
上,它给出了django.core.exceptions.FieldError:为用户指定的未知字段(处于活动状态,是工作人员)
错误。我确实在模型中添加了两个字段,如中所示question@AnujTBEmakemigrations在没有这个方法的情况下可以工作吗?我已经在admin.py
中添加了一些代码来将这个模型添加到admin中。错误出现在admin.py
中。我将为此发布一个不同的问题,因为我当前的问题已经得到了回答。我添加了这些方法。但是现在在makemigrations
上,它给出了django.core.exceptions.FieldError:为用户指定的未知字段(处于活动状态,是工作人员)
错误。我确实在模型中添加了两个字段,如中所示question@AnujTBEmakemigrations在没有这个方法的情况下可以工作吗?我已经在admin.py
中添加了一些代码来将这个模型添加到admin中。错误出现在admin.py
中。我将为此发布一个不同的问题,因为我当前的问题已经得到了回答。