0

私の Django プロジェクトには、ユーザー認証システムがあります。各ユーザーにはユーザー プロファイルがあります。

# Extending main user profile
class UserProfile(models.Model):
    # Required
    user = models.OneToOneField(User)

    # Added fields to main user model
    position = models.CharField(max_length=20, null=True, blank=True)
    avatar = models.ImageField(upload_to=upload_path_handler, blank=True, default='images/avatar.png')

class Meta:
    app_label = 'auth'

# handler --  Create automatically UserProfile foreign key when
# a new user is registered.
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        # Creating UserProfile
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

さて、メイン関数が次のようなものを返す context_processor.py があります。

return {'USER_MEDIA_URL': settings.USER_MEDIA_URL,
'DEBUG': settings.DEBUG,
'SITE_URL': settings.SITE_URL,
'keys_left': keys_left,
'ownRoom': c,
'userThumbnail': request.user.get_profile().avatar,}

私のすべてのテンプレートは「userThumbnail」を使用し、「request.user.get_profile().avatar」は何の説明もなくランダムに失敗します。

テンプレートで返されるエラーは次のとおりです。

Unable to load the profile model, check AUTH_PROFILE_MODULE in your project settings

このエラーが発生する場合とそうでない場合があります。それは非常に迷惑です。

ヒントはありますか?

4

2 に答える 2

1

とても迷惑です。

:)

プロファイルを作成する以外にpost_saveで他の追加のタスクを実行する必要がない場合は、代わりにdjangoのAutoOneToOneFieldを使用できますか?

get_profile()メソッドは、プロファイルが存在しない場合、プロファイルを作成しません。 (django docs)

AutoOneToOneFieldは行います。

それは実際には答えではありませんが、それはあなたのための解決策になるかもしれません。

from annoying.fields import AutoOneToOneField

class UserProfile(models.Model):

    user = AutoOneToOneField(User, verbose_name=_(u"user"),
                             on_delete=models.CASCADE,
                             related_name="profile")

次に、次のようなもので使用します。

return { 'userThumbnail': request.user.profile.avatar, }
于 2012-06-17T11:33:11.787 に答える
0

以下を settings.py に追加します。

AUTH_PROFILE_MODULE = 'appname.UserProfile'

これで問題は解決するはずです。

于 2012-06-17T06:41:04.500 に答える