2013-10-13 60 views
0

我知道這很簡單,但我無法理解如何將某些模型連接在一起以在我的Django模板中顯示。我有「團隊」,可以有幾個「聯繫人」。在Django中獲取和顯示相關對象

到目前爲止我有:

class Group(models.Model): 
    group_name = models.CharField() 

class Contact(models.Model): 
    contact_name = models.ForeignKey(Group) 

在我看來,起初我以爲只是讓我的團體也將得到任何附加的接觸,但預期不會出現以上問題:

def get_queryset(self): 
    groups = Group.objects.all() 
    return groups 

我期待做這樣的事情在我的模板:

{% for group in groups %} 
    <h2>{{ group.group_name }}</h2> 
    {% for c in group.contact %} 
     <h3>{{ c.contact_name }}</h3> 
    {% endfor %} 
{% endfor %} 

這不起作用 - 我做錯了什麼?在我看來,確保每個組的聯繫人都被檢索到的正確查詢是什麼?

+1

'{%用於group.contact_set.all%C}' –

+0

如在該文檔的這部分指出:https://docs.djangoproject.com/en/1.5/ref/models/relations/ – sebastibe

+0

由於布爾汗,我正在閱讀文檔的方式,我認爲.contact_set方法是在視圖中使用,我甚至沒有想到在模板中使用它。讚賞:) – mrhigham

回答

1

嗯,看起來你已經得到了你的一些代碼從一個不同的地方,所以只是讓你可以充分了解,你可以在2不同的方式做到這一點:

1)要訪問任何形式的相關對象,是一個簡單的ForeignKeyManyToMany你只需要從相反的模式去使用_set像這樣的例子:

class Group(models.Model): 
    group_name = models.CharField() 

class Contact(models.Model): 
    contact_name = models.ForeignKey(Group) 

{{ group.contact_set.all }} 

2)你可以設置一個名稱

class Contact(models.Model): 
    contact_name = models.ForeignKey(Group, related_name='contacts') 

所以,related_name kwarg爲您設置一個新的名字,而不是_set一個:比默認_set改變Contact這樣不同

{{ group.contacts.all }} 

我希望我設法使有關簡單更清晰訪問模型相關的對象。

+0

真棒,謝謝!我曾閱讀過有關「_set」方法的內容,但並未意識到它將用於模板中。我以爲在開始查看模板之前,我必須在視圖中使用它!!感謝您的傑出答案。 – mrhigham

+0

是的,你可以在任何地方使用它來訪問相關的對象。沒問題,我很高興可以幫忙。 :) –