2013-03-08 58 views
3

我正在構建一個用於跟蹤光纖電纜的Django應用程序。我遇到了一個我認爲是相關管理者的問題,因爲在一些模板中,我可以做到我想做的,但在其他人做不到。使用_set.all的Django模板

的什麼,我試圖做一個工作示例:

<ul> 
    {% for lanroom in building.lanroom_set.all %} 
    <li><a href="/lanrooms/{{ lanroom.id }}/">{{ lanroom.lan_room_name }}</a></li> 
    {% endfor %} 
</ul> 

這樣做是什麼給了我一套局域網機房有詳細正在查看的建設作爲一個外鍵。

我想要做的是將一根電纜連接到轉接板連接器。所以該模板具有以下內容:

<li>Date Added: {{ adaptorplateconnector.date_added }}</li> 
<li>Connector Type in {{ adaptorplateconnector }}:</li> 
<ul> 
    <li><a href="/connectortypes/{{ adaptorplateconnector.connector_type_id.id }}/">{{ adaptorplateconnector.connector_type_id.type }}</a></li> 
</ul> 
<li>Strand connected to {{ adaptorplateconnector }}: 
<ul> 
    {% for strand in adaptorplateconnector.strand_set.all %} 
    <ali><a href="/strands/{{ strand.id }}/">{{ strand }}</a></li> 
    {% endfor %} 
</ul> 

然而,我沒有得到連接到適配器板連接器的任何股。以下是相關機型:

class AdaptorPlateConnector(models.Model): 
    adaptor_plate_id = models.ForeignKey('AdaptorPlate') 
    connector_type_id = models.ForeignKey('ConnectorType') 
    strand_position = models.CharField(max_length=200) 
    date_added = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return self.strand_position 

class Strand(models.Model): 
    cable_id = models.ForeignKey('Cable') 
    end1_plate_connector_id = models.ForeignKey('AdaptorPlateConnector', related_name= 'end1_adaptor_plate_connector') 
    end2_plate_connector_id = models.ForeignKey('AdaptorPlateConnector', related_name= 'end2_adaptor_plate_connector') 
    in_use = models.CharField(max_length=200) 
    desc = models.CharField(max_length=200) 
    date_added = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return "End1: " + self.end1_plate_connector_id.__unicode__() + ", End2: " + self.end2_plate_connector_id.__unicode__() + ", Cable: " + self.cable_id.__unicode__() 

我怎樣才能像涉及到細節正在觀看的AdaptorPlateConnector股的名單?任何有識之士將不勝感激。我使用的是通用視圖,並且此模板適用於DetailView

+0

你的代碼看起來很好。你確定'Strand'和'AdaptorPlateConnector'實例存在於你的數據庫中嗎? – Colleen 2013-03-08 18:00:33

+1

我在django管理面板中創建了正確連接的測試條目,所以我不確定爲什麼它們不會在視圖中鏈接到一起 – Michael 2013-03-08 18:28:34

回答

8

您有兩個關係,從StrandAdaptorPlateConnector,因此您已正確使用related_name來命名反向關係。也就是說,你必須使用這些名稱之一:

{% for strand in adaptorplateconnector.end1_adaptor_plate_connector.all %} 

{% for strand in adaptorplateconnector.end2_adaptor_plate_connector.all %} 

注意related_name的實際選擇是有點奇怪:作爲展示的一樣,這是您用來參考的名字Strand from AdaptorPlateConnector

(另外,與此無關,但請不要使用_id的名稱爲ForeignKeys:基礎數據庫字段是ID,但字段類本身是對實際相關模型實例的引用,而不是ID )

+0

非常感謝!這解決了我遇到的問題。我會考慮讓你的模型更好。說真的,你已經度過了我的一天! – Michael 2013-03-08 18:52:45

+0

如果我正在重構模型引用給其他人的名字,我應該把它們叫做end1_plate_connector並把_id關閉嗎? – Michael 2013-03-10 01:57:41

+0

是的,那樣更好。而'related_name'屬性應該在某個地方有'strand'。 – 2013-03-10 10:58:03