因此,我使用AbstractUser创建了一个Customer用户模型
Model.py
class Department(models.Model):
department_name = models.CharField(max_length=20)
def __str__(self):
return self.department_name
class Role(models.Model):
role_name = models.CharField(max_length=120)
def __str__(self):
return self.role_name
class Task(models.Model):
task_desp = models.TextField(max_length=100)
in_progress = models.BooleanField()
def __str__(self):
return self.task_desp
class Employee(AbstractUser):
username = None
email = models.EmailField(max_length=100,unique=True)
phone_number = models.CharField(max_length=14)
department = models.ForeignKey(Department,on_delete=models.CASCADE,null=True,blank=True)
role = models.ForeignKey(Role,on_delete=models.CASCADE,null=True,blank=True)
address = models.TextField(max_length=200)
task_assigned = models.ForeignKey(Task,on_delete=models.CASCADE,null=True,blank=True)
USERNAME_FIELD= 'email'
REQUIRED_FIELDS = ['phone_number']
objects= UserManager()
def __str__(self):
return self.email
manager.py
from django.contrib.auth.base_user import BaseUserManager
class UserManager(BaseUserManager):
use_in_migrations = True
def create_user(self,email,password=None,**extra_fields):
if not email:
raise ValueError("Please provide email")
email = self.normalize_email(email)
user = self.model(email=email,**extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self,email,password,**extra_fields):
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
if extra_fields.get('is_staff') is not True:
raise ValueError("super user must have staff user")
return self.create_user(email,password,**extra_fields)
在设置中添加了模型
AUTH_USER_MODEL = 'emp.Employee'
所以,我做了3用户通过python manage.py createsuperuser,并能够登录到承认网站,但当我做了第4个用户直接从管理网站,给它所有的工作人员和超级用户权限我无法登录
我得到这个错误
请输入员工帐户的正确电子邮件和密码。请注意,这两个字段都可以区分大小写。
我创建这个Elon用户(忽略名称)直接从管理面板,但我无法登录与电子邮件和密码提供,尽管我已经检查了员工和超级用户选项。我认为直接显示的密码可能是问题所在,因为其他3个用户的密码是加密的。
2条答案
按热度按时间ovfsdjhp1#
ModelAdmin
直接保存“password”,而不是hash。你应该自己在ModelAdmin
中使用保存_model方法:5fjcxozz2#
是真的。当我使用AbstractUser实现自定义用户模型并在管理站点上创建用户时,我也遇到了您提出的问题。我所做的几乎和马克西姆所做的相似。我将此方法添加到自定义用户类中,以覆盖默认的保存方法
该方法用加密的密码保存新用户。如果你想让它在更新密码时也能工作,你可以去掉'
if not self.pk
'参数