В представлении 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 и использовать оптимизированный запрос внутри него.

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