Почему метод set password не работает в django?

Я реализовал класс менеджера пользователей, но мой метод set_password работает только для суперпользователей, и у меня есть проблема с входом обычных пользователей

вот мой manager.py:

from django.contrib.auth.base_user import BaseUserManager


class UserManager(BaseUserManager):
    def create_user(self, username, phone_number, password, **extra_fields):
        if not phone_number:
            raise ValueError('Phone number must be set!')
        user = self.model(username=username, phone_number=phone_number, **extra_fields)
        user.set_password(user.password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, phone_number, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(username, phone_number, password, **extra_fields)


вот моя модель пользователя:

from django.db import models
# Create your models here.
from django.core.validators import RegexValidator
from django.db import models
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AbstractUser
from .manager import UserManager



`class User(AbstractUser):
    GENDER_CHOICE = (
        ('he', 'male'),
        ('she', 'female')
    )

    HOBBIES = (
        ('sport', '🏆'),
        ('music', '♫'),
        ('movie', '🎬'),
 

       ('sleeping', 'ᶻ 𝗓 𐰁'),
        ('photography', '📷')
    )
    username = models.CharField(max_length=25, unique=True)
    phone_number = models.CharField(max_length=11, validators=[RegexValidator(
        regex=r"^09[0|1|2|3][0-9]{8}$"
    )])
    biography = models.CharField(max_length=20, default=None, null=True, blank=True)
    hobbies = models.CharField(choices=HOBBIES,max_length=250,null=True,blank=True)
    gender = models.CharField(choices=GENDER_CHOICE, max_length=250, null=True)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['phone_number', 'password']
    objects = UserManager()`



Я пробовал использовать метод set_password в файле менеджера, но он работает только для суперпользователей и не хэширует пароль обычных пользователей и у меня проблема со входом для обычных пользователей, потому что он сравнивает хэшированный пароль с нехэшированным паролем, который сохранен в базе данных и выдает ошибку Я хотел настроить пароль самостоятельно, но очевидно, вы должны использовать другое имя для поля пароля в модели, например custom_password, так что я попробовал это и я изменил аргумент метода sep_password на "custom_password" и это не сработало снова, так что я удалил поле пароля, чтобы использовать пароль для самой модели, но у меня все еще есть эта проблема, и это мой 4-й проект, и я устал

Вернуться на верх