这相当难看,但您可能可以对 Userobjects
属性进行猴子补丁,例如。在中间件中:
# 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,这是一个您可以完全控制的模型类?无论如何,您始终可以从配置文件中检索用户对象,所以……</p>