Python 无法登录我的超级用户(自定义用户模型/管理员)

Python 无法登录我的超级用户(自定义用户模型/管理员),python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试使用自定义用户模型和自定义用户管理器构建超级用户。关于create_superuser方法,我做了与django doc完全相同的事情,在我的shell中,我能够创建一个带有电子邮件和密码的超级用户。但是,当我尝试登录django管理页面时,出现了以下wierd错误: 请为员工帐户输入正确的电子邮件和密码。注 这两个字段可能区分大小写 来自django.contrib.auth.base\u用户导入AbstractBaseUser,BaseUserManager 从django.db导

我正在尝试使用自定义用户模型和自定义用户管理器构建超级用户。关于create_superuser方法,我做了与django doc完全相同的事情,在我的shell中,我能够创建一个带有电子邮件和密码的超级用户。但是,当我尝试登录django管理页面时,出现了以下wierd错误:

请为员工帐户输入正确的电子邮件和密码。注 这两个字段可能区分大小写

来自django.contrib.auth.base\u用户导入AbstractBaseUser,BaseUserManager
从django.db导入模型
从multiselectfield导入multiselectfield
类UserManager(BaseUserManager):
#自定义创建用户方法
def create_用户(自我、电子邮件、密码=无):
如果不是电子邮件:
raise VALUERROR('用户必须有电子邮件地址')
user=self.model(
电子邮件=自我规范化电子邮件(电子邮件)
)
user.set_password=密码
user.save(使用=self.\u db)
返回用户
#自定义创建超级用户方法
def create_超级用户(自我、电子邮件、密码=无):
user=self.create\u用户(
电子邮件=自我规范化电子邮件(电子邮件),
密码=密码
)
user.admin=True
user.save(使用=self.\u db)
返回用户
类用户(AbstractBaseUser):
#设置感兴趣的选项时,必须添加其他字段。。。
数学=‘mat’
物理=‘物理’
历史=‘他的’
BIOLOGIE='bio'
经济学=‘生态’
政治=‘政治’
音乐='mus'
英语='eng'
法语='fra'
西班牙语=‘spa’
法律=‘法律’
计算机科学='cs'
通信='com'
市场营销='mar'
运动='spo'
兴趣与选择=(
(数学,'数学'),
(物理学,'物理学'),
(历史,“历史”),
(BIOLOGIE,“BIOLOGIE”),
(经济学,“经济学”),
(政治,"政治"),,
(音乐,'音乐'),
(英文"ENGLISH"),,
(法语,“法语”),
(西班牙语,“西班牙语”),
(法律,'法律'),
(计算机科学,“计算机科学”),
(通信,“通信”),
(营销,“营销”),
(体育,'体育')
)
兴趣=多选字段(
最大长度=2,
选择=兴趣\选择
)
#建立排名制度
排名_选择=[
(‘银’、‘银’),
(‘黄金’、‘黄金’),
(‘铂’、‘铂’),
(“钻石”、“钻石”)
]
email=models.EmailField(
最大长度=50,
唯一=真
)
用户名=models.CharField(
最大长度=25,
唯一=正确,
空=真,
空白=真
)
date\u joined=models.DateTimeField(自动\u now\u add=True)
first_name=models.CharField(最大长度=50)
last_name=models.CharField(最大长度=70)
出生日期=models.DateField(null=True,blank=True)
声誉=模型。正积分字段(默认值=0)
active=models.BooleanField(默认值=True)
rank=models.CharField(选项=RANKING\u选项,最大长度=1)
staff=models.BooleanField(默认值=False)
admin=models.BooleanField(默认值=False)
bio=models.TextField(
最大长度=300,
默认值=”,
空白=真
)
objects=UserManager()
#将电子邮件设置为身份验证的主要来源
用户名\字段='电子邮件'
#仅限超级用户
必填字段=['password']
#def get_绝对_url(自身):
#使用reverse+nom de l'url de view
定义(自我):
返回self.email
def get_全名(自我):
返回f“{self.first_name}{self.last_name}”
def get_short_名称(自我):
返回self.first\u name
def get_用户名(自我):
返回self.username
def设置用户联盟(自我):

如果15我们需要将标志is_superuser设置为True,以使用户成为系统中的超级用户。请查找以下代码:

def create_superuser(self, email, password):
    """
    create and save superuser
    """
    user = self.create_user(
                 self.normalize_email(email), password=password)
    user.is_staff = True
    user.is_superuser = True
    user.admin = True
    user.save(using=self._db)
    return user
您可以通过调用
.set\u password(..)
设置密码,而不是分配新值:

class UserManager(BaseUserManager):

    #custom create_user method
    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email = self.normalize_email(email)
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

我该怎么改变呢?我跟着djangodocumentation@Valentin:您编写了
user.set\u password=password
(这可能是您复制错误的内容)?
class UserManager(BaseUserManager):

    #custom create_user method
    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email = self.normalize_email(email)
        )
        user.set_password(password)
        user.save(using=self._db)
        return user
#Custom create_super_user method
def create_superuser(self, email, password=None):
    user = self.create_user(
        email = self.normalize_email(email),
        password = password
    )
    user.admin = user.is_superuser = user.is_staff = True
    user.save(using=self._db)
    return user