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