Как подкласс или исправление запроса, когда пользователь заполняется AuthenticationMiddleware
Я расширил стандартную модель Django AbstractUser, создав эту модель Visitor, которая содержит больше информации о пользователе.
class Visitor(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, related_name='visitor')
Посмотрев на замечательную Django Debug Toolbar, я заметил, что и модель User, и эта модель Visitor вызывают запрос к базе данных при каждом запросе. Это навело меня на мысль, что, возможно, стоит вставить .select_related("visitor")
в запрос, который получает модель User.
Следуя по кроличьей норе, начиная с AuthenticationMiddleware
, я смог вывести, что модель пользователя извлекается в django.contrib.auth.backends.ModelBackend.get_user()
. Я вручную отредактировал файл в своей среде, включив в него .select_related("visitor")
, и он заработал как шарм.
Очевидно, что редактирование файлов пакета в среде не является оптимальным. Поэтому теперь встает вопрос: как мне перейти к подклассам, патчам или иным образом выполнить это чистым способом?
Используется Django 3.2.12 с Python 3.10 btw
class User(AbstractUser):
objects = UserManager()
<
from django.contrib.auth.base_user import BaseUserManager
class UserManager(BaseUserManager):
def get_queryset(self):
return super().get_queryset().select_related("visitor").all()
<