これはかなり醜いですが、おそらくユーザobjects
のプロパティをmonkeypatchすることができます。
# 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:このコードは、テストされたことがない、純粋にtheoricです私は時間がありません。
注2:このソリューションを長期的な保守性の観点から使用することはお勧めできませんでした。
注3:誰かが何か他のことを示唆している場合は、おそらく私以上の人のことを聞いてください。
注4:おそらくもっと良い考えとして、プロファイルを照会しようとしないでください。これは、完全にコントロールしているモデルクラスですか?とにかくプロファイルからユーザーオブジェクトをいつでも取得できます。
私は清潔な方法を見つけることができないので、私はこの答えを受け入れるつもりです。しかし、私はdjango BTのバグレポートを埋めました。成り行きを見守る。 https://code.djangoproject.com/ticket/16379 –
初心者は、あなたが問題を解決するための受け入れ可能なアプローチだと結論づけることができるので、本当にこの答えを受け入れるべきではありません。 – NiKo
試してみましたが、うまくいきませんでした...簡単な回避策でしたか – James