Django - Невозможно войти в админку сайта, создав пользователя прямо с сайта admit
Итак, я создал модель пользователя Customer, используя AbstractUser
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 и смог войти на сайт admit, но когда я создал 4-го пользователя прямо с сайта admin, дал ему все права staff и superuser, я не могу войти
Я получаю эту ошибку
Пожалуйста, введите правильный email и пароль для учетной записи персонала. Обратите внимание что оба поля могут быть чувствительны к регистру.
Я создал этого пользователя Elon (не обращайте внимания на имя) прямо из панели администратора, но я не могу войти в систему с помощью предоставленного email и пароля, несмотря на то, что я проверил опции staff и superuser. Я думаю, что проблема в пароле, который показывается напрямую, потому что для других 3 пользователей пароль зашифрован.
При сохранении -adminmodel сохраняет пароль напрямую, а не хэш. Вы должны сделать это самостоятельно при сохранении модели в модели admin:
Def model_save(sale, obj, *args, **kwargs):
If not obj.pk:
obj.set_password(password)
super().model_save()