这个方法比较丑陋,但是你可以尝试对用户的objects
属性进行猴子补丁,例如在中间件中:
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')
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',
# ...
)
通过:
MIDDLEWARE_CLASSES = (
'yourapp.middleware.MyAuthMiddleware',
)
注意1:此代码纯属理论,从未经过测试,我也没有时间测试。
注意2:从长期可维护性的角度来看,我无法推荐使用这个解决方案。
注意3:如果有人建议其他解决方案,你应该更多地听取他或她的意见而不是我。
注意4:作为一个可能更好的想法,为什么不尝试查询Profile,这是一个您完全控制的模型类?您总是可以从配置文件中检索用户对象,所以...