get_profile()在Django项目中随机失败

时间:2012-06-17 05:00:31

标签: django templates profile django-context

在我的Django项目中,我有一个用户身份验证系统。每个用户都有一个userprofile:

# 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,它的main函数返回如下内容:

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

有时我会收到此错误,有时则不会。这很烦人。

任何提示?

2 个答案:

答案 0 :(得分:1)

  

这很烦人。

:)

如果您不需要在创建配置文件的情况下在post_save上执行其他额外任务,那么您可以使用django-annoying中的AutoOneToOneField吗?

  

方法get_profile()不会创建配置文件(如果它不存在)。   (django docs)

AutoOneToOneField does

这不是一个真正的答案,但它可能会成为你的解决方案。

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, }

答案 1 :(得分:0)

将以下内容添加到settings.py

AUTH_PROFILE_MODULE = 'appname.UserProfile'

这应该可以解决问题。