Html Django模板从没有上下文的外键获取值

Html Django模板从没有上下文的外键获取值,html,django,Html,Django,我有以下数据模型: class Membership(models.Model): slug = models.SlugField() membership_type = models.CharField(choices=MEMBERSHIP_CHOICES, default='Free', max_length=11) price = models.IntegerField(default=50) stripe_plan_id = models.CharFiel

我有以下数据模型:

class Membership(models.Model):
    slug = models.SlugField()
    membership_type = models.CharField(choices=MEMBERSHIP_CHOICES, default='Free', max_length=11)
    price = models.IntegerField(default=50)
    stripe_plan_id = models.CharField(max_length=40)

    def __str__(self):
        return self.membership_type


class UserMembership(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    stripe_customer_id = models.CharField(max_length=40)
    membership = models.ForeignKey(Membership, on_delete=models.SET_NULL, null=True)
在我的导航栏中如果用户经过身份验证,我想显示成员类型。是否可以在没有视图传递上下文的情况下执行此操作

我尝试了以下方法:

{% if request.user.is_authenticated %}
    {{ request.user.usermembership.membership.membership_type }}
    {{ request.user.usermembership_set.membership_set.membership_type }}
{% endif %}

在这里,用户可以有零个、一个或多个
成员身份
s,因为您为用户模型制作了
外键
,而不是
OneToOneField
。因此,您可以迭代
UserMembership
对象,并为每个项目呈现相关
.membership
.membership\u类型

{% for usermembership in request.user.usermembership_set.all %}
    {{ usermembership.membership.membership_type }}
{% endfor %}
我们可以通过以下方式来实现这一点:

{{ request.user.usermembership.membership.membership_type }}

{{request.user.usermembership.membership.membership_type}
谢谢。这很有效。如果我想将ForeignKey更改为OneToOneField,我还可以使用此解决方案吗?您还可以使用
相关的\u name
属性
user=models.ForeignKey(…,related\u name='memberships')
将关系命名为
用户.成员身份
@S.a:no,那么它就是
{request.user.usermembership.membership.membership}
。请注意,
OneToOne
意味着
用户
只能有一个
UserMembership
,因此建模随之改变。是的,就是这种情况。我将更改它,并在您的评论中使用解决方案。请更新您的答案(但保留第一个解决方案)
{{ request.user.usermembership.membership.membership_type }}