В представлении Django Rest Framework запрос request.user делает вызов базы данных или вызов базы данных происходит до того, как запрос достигнет представления?
Мне нужно получить некоторую информацию о моих пользователях, и я пытаюсь избежать ненужных обращений к базе данных.
Нужная мне информация хранится в трех моделях: User, UserProfile и Membership.
Оба UserProfile и Membership имеют отношения OneToOne с моделью User.
Я знаю, что могу использовать select_related() для получения связанных моделей из базы данных за один вызов. Таким образом, я могу сделать что-то вроде:
User.objects.select_related('userprofile').select_related('membership').get(id=request.user.id)
Но это не должно быть правильным, потому что если я использую некоторую информацию о пользователе для выполнения запроса, это означает, что я уже получил эту информацию в предыдущем вызове.
Итак, каким образом лучше всего получить эту информацию, минимизируя обращения к базе данных? Возможно ли вообще получить информацию из этих 3 моделей за один вызов?
DRF выполняет пользовательский запрос к БД внутри класса аутентификации. Смотрите источник здесь. Поэтому если вам нужно оптимизировать этот запрос, вы должны реализовать пользовательский класс аутентификации (см. подробности здесь), переопределить метод authenticate_credentials
и использовать оптимизированный запрос внутри него.