Пользовательская модель Django - поле имя пользователя удаляется
Здравствуйте, я пишу пользовательскую модель пользователя на django
и у меня есть поле имя пользователя вместе с полем email.
когда я устанавливаю USERNAME_FIELD = 'username'
я получаю эту ошибку
django.core.exceptions.FieldDoesNotExist: User has no field named 'username'
Когда я проверил миграции для модели, я обнаружил, что поле username не существует среди полей модели
я попробовал промыть и сделать миграции снова, но все осталось по-прежнему но когда я меняю имя поля на что-то другое, кроме имени пользователя, оно работает
вот моя модель:
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
from django.db.models.enums import Choices
from django.utils.translation import gettext_lazy as _
class User(AbstractBaseUser):
class Role(models.TextChoices):
User = 'USER', _('User')
Admin = 'ADMIN', _('Admin')
Stuff = 'STUFF', _('Stuff')
username = models.CharField(max_length=64, unique=True)
email = models.EmailField(max_length=256, unique= True, verbose_name="Email")
full_name = models.CharField(max_length=256, verbose_name= "Full Name", null=True, blank=True)
active = models.BooleanField(default=True, verbose_name= "Active")
role = models.CharField(max_length=10, choices = Role.choices, default = Role.User, verbose_name= "Role")
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELD = ['username', 'email','password']
def __str__(self):
return self.username
@property
def role(self):
return self.role
@property
def admin(self):
return (self.role == self.Role.Admin)
@property
def stuff(self):
return (self.role == self.Role.Stuff)
@property
def username(self):
return self.username
Вы могли бы убедиться в этом?
from django.contrib.auth.models import User
Тогда
class UserAuth(models.Model):
username = models.OneToOneField(User, on_delete = models.CASCADE, blank=True, null=True)
я действительно заставил его работать, удалив :
@property
def username(self):
return self.username
но я не уверен в причине. возможно, потому что я использовал декоратор свойств
я хотел бы знать причину