2016-11-25 63 views
0

我在萬畝型號:選擇模板的父母外鍵

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

通過您的數據庫結構,您將能夠獲取模板中與公司相關的所有發言人和個人資料,但是您將無法獲得特定的個人資料。

要得到所有你可以使用配置文件:

{% 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 }}在您的模板來獲取登錄的用戶或配置文件對象傳遞給模板。