0

ドキュメントに従って、モデルにUserProfileテーブルを設定し、それを管理領域のUserテーブルに関連付けて、ユーザーが登録するときにこのUserProfileテーブルにユーザーに関する追加情報を保存しようとしています。

私は以下views.pyを持っています:

from django.contrib.auth import authenticate, login, logout


def register(request):
    if request.method == 'POST':
        query_dict = request.POST
        username = query_dict.__getitem__("username")
        email = query_dict.__getitem__("user_email")
        password = query_dict.__getitem__("password")
        repeat_password = query_dict.__getitem__("repeat_password")
        role = query_dict.__getitem__("role")
        user = User.objects.create_user(username, email, password)
        # django.db.models.signals.post_save gets called here and creates the UserProfile
        # I can write something like user_profile = user.get_profile() but I don't
        # know how to save information to the profile.
        user = authenticate(username=username, password=password)

        if user is not None and user.is_active:
            login(request, user)
            return HttpResponseRedirect("/")

上記のコードのコメントでわかるように、関連付けられたUserProfileオブジェクトを取得できますが、そこからUserProfileテーブルに追加のデータ(ロール)を格納する場所がわかりません。すべてのドキュメントは私に次のように伝えています:

get_profile() このユーザーのサイト固有のプロファイルを返します。現在のサイトでプロファイルが許可されていない場合はdjango.contrib.auth.models.SiteProfileNotAvailableを発生させ、ユーザーがプロファイルを持っていない場合はdjango.core.exceptions.ObjectDoesNotExistを発生させます。

ここで表示できます:https ://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.get_profile

ただし、ドキュメントにはget_profile()、返されるオブジェクトの種類や、それを使用してUserProfileテーブルに情報を格納する方法は記載されていません。

4

2 に答える 2

4

注:この回答は古くなっています。DjangoはAUTH_PROFILE_MODULEをサポートしなくなりました。最近のDjangoリリースでも機能するはずの回答については、この質問を参照してください。

User.get_profile()設定したもののインスタンスを返しますAUTH_PROFILE_MODULE。(アプリに合わせて調整)に設定する必要があります。"yourapp.UserProfile"次に、次のようなことができるはずです。

from yourapp.models import UserProfile
profile = user.get_profile()
assert isinstance(profile, UserProfile)
profile.role = role
profile.save() # saves to DB

インポート行やアサーション行は実際には必要ありませんUserProfile。これは、期待どおりの状態であるかどうかを確認するためだけのものです。

于 2012-01-17T21:29:40.833 に答える
1

リンクしたページから:

「以下の追加のユーザー情報の保存に関するセクションを参照してください。」、https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-usersを参照してください。

このセクションでは、User.get_profileが返すモデルを宣言する設定「AUTH_PROFILE_MODULE」があることを示しています。

また、Userモデルでpost_saveシグナルハンドラーを設定する手順に従って、Userオブジェクトが作成されるたびにプロファイルモデルのインスタンスを自動的に作成することもできます。そうしないと、User.get_profile()は例外をスローする可能性があります。

于 2012-01-17T21:29:51.317 に答える