在 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 }}
我有个人资料模型:
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 }}