Это довольно некрасиво, но вы, вероятно, можете обезопасить пользовательское свойство objects
, например. в промежуточном программном обеспечении:
# manager.py
from django.contrib.auth.models import UserManager
class MyUserManager(UserManager):
def get_query_set(self):
qs = super(MyUserManager, self).get_query_set()
return qs.select_related('profile')
# middleware.py
from django.contrib.auth.middleware import AuthenticationMiddleware
from managers import MyUserManager
class MyAuthMiddleware(AuthenticationMiddleware):
def process_request(self, request):
super(AuthenticationMiddleware, self).process_request(request)
User.objects = MyUserManager()
return None
Затем замените строку в settings.py
:
MIDDLEWARE_CLASSES = (
# ...
'django.contrib.auth.middleware.AuthenticationMiddleware',
# ...
)
Автор:
# settings.py
MIDDLEWARE_CLASSES = (
# ...
'yourapp.middleware.MyAuthMiddleware',
# ...
)
Примечание 1: Этот код является чисто теоретическим, никогда не тестировался, и у меня нет времени на это.
Примечание 2. Я не могу рекомендовать использовать это решение с точки зрения долгосрочного обслуживания.
Примечание 3: Если кто-то предлагает что-то еще, вы, вероятно, должны слушать его или ее больше, чем меня.
Примечание 4. Как, вероятно, лучшая идея, почему бы не попытаться запросить профиль, который является классом модели, над которым вы имеете полный контроль? Вы всегда можете извлечь пользовательский объект из профиля, так что…