Метод ключа ModelManager get_by_natural изменяет поле ИМЕНИ ПОЛЬЗОВАТЕЛЯ, влияющее на мою аутентификацию?

#django #django-models

Вопрос:

У меня есть пользовательская модель пользователя, которая наследуется от AbstractBaseUser которой определяет поле username_field = электронная почта, чтобы пользователи могли входить в систему с помощью электронной почты.

 class User(AbstractBaseUser):
email = models.EmailField(verbose_name="Email", unique=True)
username = models.CharField(max_length=100, unique=True)
last_name = models.CharField(max_length=100, blank=True, null=True)
first_name = models.CharField(max_length=100, blank=True, null=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_site_administrator = models.BooleanField(default=False)
is_developer = models.BooleanField(default=False)
is_project_manager = models.BooleanField(default=False)
last_login = models.DateTimeField(verbose_name="Last Login", auto_now=True)
create_on = models.DateTimeField(verbose_name="Date Created", default=timezone.now)

# So that we will be working primarily with email and not username
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username"]

objects = UserManager()
 

В качестве объекта = UserManager (), и этот содержит метод get_by_natural_key следующим образом:

     def get_by_natural_key(self, username):
        return self.get(username=username)
 

Теперь вместо того, чтобы использовать электронную почту для входа, он использует имя пользователя для входа. Обратите внимание, что UserManager наследуется от BaseUserManager следующим образом class UserManager(BaseUserManager):
Может ли кто-нибудь объяснить мне, что здесь происходит?
Является ли проблема следствием наследования или самого get_by_natural_key ()?

Комментарии:

1. Вы можете заменить это на def get_by_natural_key(self, email): return self.get(email=email)

2. Ну, я использовал это для сериализации, чтобы он не возвращал идентификатор, так как он используется в качестве внешнего ключа