这是相当丑陋的,但你可能可以猴子补丁 User 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:作为一个更好的主意,为什么不尝试查询 Profile,这是一个您可以完全控制的模型类?无论如何,您始终可以从配置文件中检索用户对象,所以……