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-annoying中的 AutoOneToOneField代替?

如果配置文件不存在,则方法 get_profile() 不会创建配置文件。 (django 文档)

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 回答