在 django 1.8+ 中通过 request.user 获取相关配置文件

Get a related profile via request.user in django 1.8+

我有个人资料模型:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name="profile_user")
    preferred_name = models.CharField()
    # more profile fields

我想通过用户在模板中访问:{{request.user}}

然而 previous answers to this question use a method that was removed in 1.7:

"These features have reached the end of their deprecation cycle and so have been removed in Django 1.7:

  • The AUTH_PROFILE_MODULE setting, and the get_profile() method on the User."

The docs 现在说我应该这样做,但 return 什么都没有:

{{request.user.profile.profile_field_i_want}}

这个例子和我的配置文件模型之间的唯一区别是我使用 settings.AUTH_USER_MODEL 但这个例子使用 User 作为 OneToOne。

但是如果我:print(settings.AUTH_USER_MODEL) 结果是 auth.User

我还确认用户确实有个人资料。

如何通过 request.user 访问用户的相关个人资料?

你的related_name是"profile_user",你应该用那个吗?

{{request.user.profile_user.profile_field_i_want}}

不过我必须说,我不知道您为什么要设置该属性:*profile" 的默认值更有意义。

要从 User 模型访问用户配置文件,您需要使用在 Profile 模型中的 OneToOneField 中作为参数传递的 related_name

因此,要调用 preferred_name,您需要执行以下操作:

{{ request.user.profile_user.preferred_name }}

因为您已将 'profile_user' 提供为 related_name

您可以像这样将个人资料名称的 ID(模型 class)与用户模型的 ID 相关联:

    user = User.objects.get(id=request.user.id)  
    profile = Profile.objects.filter(user=user).get()  
    instance = profile

然后这样调用配置文件属性:

    {{ profile.phone_number }}