Django.core.exceptions.FieldDoesNotExist: У пользователя нет поля с именем 'phone'

Я пытаюсь настроить Django's AbstractBaseUser и сделать телефон основным полем, как имя пользователя в модели AbstractUser. Но когда я пытаюсь перенести или запустить сервер, я получаю следующую ошибку: "django.core.exceptions.FieldDoesNotExist: У пользователя нет поля с именем 'phone'". USERNAME_FIELD, REQUIRED_FIELDS все установлены в Custom User и AUTH_USER_MODEL = 'users.User' также доступен в settings.py. Вот код:

class User(auth_models.AbstractBaseUser, auth_models.PermissionsMixin):
    USER = 1
    BUSINESS_OWNER = 2  

    #choices for user type
    USER_TYPE_CHOICES = [
        (USER, _('User')),
        (BUSINESS_OWNER, _('Business Owner'))
    ]

    first_name = models.CharField(
        _('first name'), max_length=200
    ),
    user_type = models.PositiveSmallIntegerField(
        _('user type'), choices=USER_TYPE_CHOICES, default=USER
    )
    phone = models.CharField(
        _('phone number'), max_length=13, unique=True
    ),
    sms_code = models.CharField(
        _('SMS code'), null=True #TODO: if verification requires change null
    )
    last_name = models.CharField(
        _('last name'), max_length=200, null=True, blank=True
    ),
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('is active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    date_joined = models.DateTimeField(
        _('date joined'), default=timezone.now
    )

    USERNAME_FIELD = 'phone'
    REQUIRED_FIELDS = ['first_name']

    objects = users_managers.UserManager()

    class Meta:
        verbose_name = _('User')
        verbose_name_plural = _('Users')
        db_table = 'users'

Код UserManager:

class UserManager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self, phone, first_name, password, **extra_fields):
        if not phone:
            raise ValueError('The given phone must be set')
        user = self.model(phone=phone, first_name=first_name, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, phone, first_name, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', False)
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(phone, first_name, password, **extra_fields)

    def create_superuser(self, phone, first_name, 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(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))

        return self.create_user(phone, first_name, password, **extra_fields)

Как я могу решить проблему?

Используйте phone_number вместо phone

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