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 }}