1

djangoでデフォルトのユーザーモデルを拡張しようとしています。

Profileというクラスを定義しました。

# code in myapp/models/profile.py

from django.db import models
from django.contrib.auth.models import User

    class Profile(models.Model):
        user = models.OneToOneField(User)
        field = models.CharField(max_length=30)
        class Meta:
            app_label="myapp"

ビュー関数で、例外が発生するメソッドを呼び出します。

def my_view_function(request):
    field = get_field(request.user)
    ...

def get_field(user):
   return user.profile.field
   # also tried return user.get_profile().field with AUTH_PROFILE_MODULE in settings.py set to "myapp.Profile", still does not work.

'unicode' object has no attribute 'get_profile' スタックトレースまたはでAttributeErrorが発生し'unicode' object has no attribute 'profile'ます。

get_field()のユーザーオブジェクトを文字列と連結しようとすると、「。」というエラーが表示されます'str' cannot concatenate with 'SimpleLazyObject'。request.userがSimpleLazyObjectを返すのを読んでみましたが、どうすれば「ウェイク」できますか?しかし、それは役に立ちませんでした。

ユーザーがログインしていることを確認するためにミドルウェアを使用しているので、ユーザーがログインしていることを確認します。ユーザーオブジェクトの何が問題になっていますか?'__unicode__'ユーザーオブジェクトにタイプがあるとdjangoが言うのはなぜですか 。

前もって感謝します!

4

2 に答える 2

3

AUTH_PROFILE_MODULE = 'yourapp.Profile'あなたがあなたの中にいると仮定すると、あなたはモデルを取得するためにオブジェクトのメソッドsettings.pyを呼び出すことができるはずです(例えば)。get_profile()UserProfilerequest.user.get_profile()

実際のフィールドを取得するには、を呼び出す必要がありますrequest.user.get_profile().field

カスタムユーザーモデルを優先して、ユーザープロファイルはdjango1.5で非推奨になっていることに注意してください。

于 2012-12-30T17:41:28.080 に答える
0

修正しました。スタックトレースを注意深く調べたところ、フィールド値をユーザーオブジェクトを予期する別の関数に渡していることに気付きました。これにより、紛らわしい__unicode__エラーが発生しました。

于 2012-12-30T19:04:31.187 に答える