我正在使用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 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
并使用
创建了superadminpython 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.
代码有什么问题?
答案 0 :(得分:2)
您需要定义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