Если вы хотите, чтобы request.user
всегда имел доступ к .profile
без дополнительного запроса, вы можете написать свой собственный аутентификационный бэкэнд , который использует select_related
при поиске пользователя, чтобы была только 1 база данных query
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
class ProfileBackend(ModelBackend):
def get_user(self, user_id):
UserModel = get_user_model()
try:
return UserModel._default_manager.select_related('profile').get(pk=user_id)
except UserModel.DoesNotExist:
return None
settings.py
AUTHENTICATION_BACKENDS = [
'app.backends.ProfileBackend',
]
Теперь, когда из базы данных загружается request.user
, профиль будет загружен в тот же запрос. Теперь вы можете получить доступ к request.user.profile.profile_note
без каких-либо дополнительных запросов