Как подкласс или исправление запроса, когда пользователь заполняется 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()
<
Вернуться на верх