Django は存在しない場合にユーザープロファイルを作成します 質問する

Django は存在しない場合にユーザープロファイルを作成します 質問する

私はrequest.user.get_profile()コードのさまざまな場所で使用しています。ただし、すべてのユーザーが自分のアカウントに関連付けられたユーザー プロファイルを持っているわけではありません。呼び出しrequest.user.get_profile()のたびに変更を加えなくても、呼び出し時にユーザー プロファイルがない場合に自動的にユーザー プロファイルを作成する方法はありますかrequest.user.get_profile()。おそらくシグナルなどを使用するのでしょう。

私が抱えている問題は、シングル サインイン ログインを使用しているため、誰かが別のシステムにログインしてから私のサイトにアクセスした場合、ログインはされているものの、ユーザー プロファイルが作成されないことです (ログイン時にユーザー プロファイルを作成します)。

ベストアンサー1

通常、ユーザー プロファイル オブジェクトは、ユーザー インスタンスが作成された直後に作成されます。これは、シグナルを使用すると簡単に実現できます。

私が抱えている問題は、シングル サインイン ログインを使用しているため、誰かが別のシステムにログインしてから私のサイトにアクセスした場合、ログインはされているものの、ユーザー プロファイルが作成されないことです (ログイン時にユーザー プロファイルを作成します)。

どうやら、ユーザー作成時にシグナルを使用するのはうまくいかないようです。 実行しようとしていることを実現する 1 つの方法は、 の呼び出しをrequest.user.get_profile()カスタム関数に置き換えることです。 としますget_or_create_user_profile(request)。この関数は、ユーザーのプロファイルを取得し、存在しない場合はその場でプロファイルを作成できます。

例えば:

def get_or_create_user_profile(request):
    profile = None
    user = request.user
    try:
        profile = user.get_profile()
    except UserProfile.DoesNotExist:
        profile = UserProfile.objects.create(user, ...)
    return profile

おすすめ記事