【问题标题】:get_profile() fails randomly in Django projectget_profile() 在 Django 项目中随机失败
【发布时间】:2012-06-17 05:00:31
【问题描述】:

在我的 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

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

有什么提示吗?

【问题讨论】:

    标签: django templates profile django-context


    【解决方案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, }
    

    【讨论】:

      【解决方案2】:

      将以下内容添加到您的 settings.py

      AUTH_PROFILE_MODULE = 'appname.UserProfile'

      这应该可以解决问题。

      【讨论】:

      • 我忘了提,我已经将 AUTH_PROFILE_MODULE 添加到我的 settings.py 中。而且配置很好。正如你所推荐的,我添加了“appname.UserProfile”。我还尝试使用小写“userprofile”中的“UserProfile”。但它仍然失败。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多