這是相當醜陋的,但你可能monkeypatch用戶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:作爲一個可能更好的主意,爲什麼不試圖查詢配置文件,這是一個您可以完全控制的模型類?你總是可以從配置文件檢索用戶對象,所以...
因爲我找不到更清潔的方式,我會接受這個答案。但是,我在django BT中填寫了一個錯誤報告。等着瞧。 https://code.djangoproject.com/ticket/16379 –
你應該真的不接受這個答案,因爲初學者可以得出這樣的結論:解決你提出的問題是一個可接受的方法,而不是。 – NiKo
試過了,它沒有工作唉...對我來說是一個簡單的解決方法 – James