在模板中选择父键外键

时间:2016-11-25 00:11:51

标签: django django-templates

我有mu模型:

class Profile(models.Model):
    user = models.OneToOneField(User, blank=True, null=True)
    phone_number = models.CharField(max_length=20, blank=True, null=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    is_administrator = models.BooleanField(default=False)

    def __str__(self):
        return '{0}\'s profile'.format(self.user.username)

class Company(models.Model):
    created_date = models.DateTimeField(default=timezone.now, null=True)
    name = models.CharField( max_length=200)

class Invitation(models.Model):

    created_date = models.DateTimeField(default=timezone.now, null=True)

    date = models.ManyToManyField(Date)
    speaker = models.ForeignKey(Speaker, on_delete=models.CASCADE)
    invited_to = models.ForeignKey(Company, on_delete=models.CASCADE)
    talk = models.ManyToManyField(Talk)

    def __str__(self):
        return self.speaker.name + ' by ' + self.invited_to.name
class Speaker(models.Model):
    name = models.CharField(max_length=200, blank=False, null=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    talk = models.ManyToManyField(Talk)

所以在我看来,我发送了invites = Invitation.objects.all()

我在模板中需要的是访问个人资料的名称:Invitation.invited_to.Company.Profile.name,以及Invitation.speaker.Company.Profile.name。

有没有任何方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

使用您的数据库结构,您将能够获得模板中与公司关联的所有发言人和个人资料,但您将无法获得特定的个人资料。

获取您可以使用的所有配置文件:

{% for invite in invites %}
    {% for profile in invite.invited_to.company.profile_set.all %}
        {{ profile.user.first_name }} {{ profile.user.last_name }}
    {% endfor %}
{% endfor %}

这应该为您提供已被邀请的公司中的每个个人资料的名称。

你可以做类似的事情来获得公司的所有发言人。

{% for invite in invites %}
    {% for profile in invite.speaker.company.profile_set.all %}
        {{ profile.user.first_name }} {{ profile.user.last_name }}
    {% endfor %}
{% endfor %}

对您正在尝试的内容进行猜测,我想您实际上想要在模板中使用{{ request.user }}来获取登录用户或传递个人资料对象到模板。