2014-01-09 36 views
0

我有以下模型類稱爲A和B通過外鍵相關。所以B有一個關於外鍵的鏈接。我現在想循環通過A,拉出潛在的衆多B類。現在,這裏是扭曲,什麼是在模板中顯示這些最聰明的方法?在Django模板中顯示多個相關的類

class A(models.Model): 
    field1 = models.CharField(max_length=30) 


class B(models.Model): 
    aAID = models.ForeignKey(A) 
    field1 = models.CharField(max_length=30) 

現在,讓A是相當容易的,因爲我得到查詢集,即

alla = A.objects.all().order_by("-date") 

然後,我可以通過阿拉通過渲染髮送給模板和循環,但我怎麼可能在該模板中也設法遍歷找到的B類。

回答

2

A類有b_set屬性返回相關的B對象。

您可以在模板中使用這個屬性:

{% for a in alla %} 
    {{ a }} 
    {% for b in a.b_set.all %} 
    {{ b }} 
    {% endfor %} 
{% endfor %} 

引述一個偉大的人(和Django documentation):

當你在模型中定義的關係(即一個ForeignKey, OneToOneField或ManyToManyField),該模型的實例將有一個方便的API訪問相關對象。從相關模型到 定義了關係模型的鏈接 -

[...]

的Django也爲 關係的「其他」側創建API存取。例如,Blog對象b可以通過entry_set屬性訪問 所有相關對象的Entry列表: b.entry_set.all()

3

您可以使用自動創建的經理a.b_set此:

>>> for a in A.objects.all(): 
>>>  for b in a.b_set.all(): 
>>>   print b.field1 

或模板:

{% for a in alla %} 
    {% for b in a.b_set.all %} 
     {{ b.field1 }} 
    {% endfor %} 
{% endfor %} 

也看看the official documentation

2

您可以循環有關的成員,就像在模板中的其他屬性,所以你可以這樣做:

<table> 
{% for a in alla %} 
    {% for b in alla.b_set.all %} 
     <tr><td>{{a}}</td><td>{{b}}</td></tr> 
    {% endfor %} 
{% endfor %} 
</table> 

它只是一個例子。你在模板中做你想要的東西