2

UserProfileメソッドを使用してユーザー モデルを拡張しました。UserProfile matching query does not existただし、クエリの実行時にDjango エラー メッセージが表示されることがあります。request.user.get_profile()

これは、システムからログアウトしたためにユーザーがAnonymousUser. UserProfileが存在しない場合、ユーザーを自動的にログイン ページにリダイレクトする方法はありますか。

私はrequest.user.get_profile()かなりの場所で使用しているので、自分のコードを実際にすべての人にチェックを入れたくないので、一度だけ行う必要があるシグナルまたは同様のものを使用する方法を考えていました。

また@login_required、関数呼び出しで使用していますが、このエラーが発生する前にユーザーをリダイレクトしていないようです。

システムへのログイン時に UserProfile アカウントを持っていない場合は自動的に作成されるため、すべての登録ユーザーには UserProfile アカウントが必要です。

Django 1.1も使用しています

4

3 に答える 3

2

これはうまくいくはずです

def profile_required():
    def has_profile(user):
        try:
            user.get_profile()
        except:
            return False
        else:
            return True
    return user_passes_test(lambda u: has_profile(u))
于 2011-01-12T18:43:05.483 に答える
0

デコレータは、ユーザーがログインしている@login_requiredことを確認します。このエラーは、一部のユーザー レコードに UserProfile がないために発生している可能性があります。これをシェルでテストできます

from django.contrib.auth.models import *
for u in User.objects.all():
    try:
        u.get_profile()
    except:
        print "%s does not have a profile" % u
于 2010-09-02T14:22:25.413 に答える
0

それで、信号を使用する方法や、一度だけ行う必要がある同様の方法を考えていました。

私の知る限り、信号でこれを行うことはできません。

ただし、カスタム デコレータを作成して置き換えることができますlogin_required。このデコレータは、ラップlogin_requiredしてユーザー プロファイルをチェックできます。login_required次に、インポート ステートメントでDjango のものを独自のものに置き換えることができます。

于 2010-09-02T08:40:44.820 に答える