Пользовательская модель 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

но я не уверен в причине. возможно, потому что я использовал декоратор свойств

я хотел бы знать причину

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