5

光ファイバーケーブルを追跡するための Django アプリの構築に取り組んでいます。relatedmanager と思われるもので問題が発生しています。テンプレートによっては、やりたいことを実行できますが、他のテンプレートでは実行できません。

私がやろうとしていることの実例:

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

これが行うことは、建物が詳細に表示されている LAN ルームのセットを外部キーとして取得することです。

私がやろうとしているのは、ケーブルのストランドをアダプタ プレート コネクタに接続することです。したがって、そのテンプレートには次のものがあります。

<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 用です

4

1 に答える 1

10

Strandからへの2 つのリレーションがあるため、逆のリレーションシップの名前AdaptorPlateConnectorを正しく使用しています。related_nameつまり、次のいずれかの名前を使用する必要があります。

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

また

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

related_name の実際の選択は少し奇妙であることに注意してください。ここで示されているように、それはStrandfromを参照するために使用する名前ですAdaptorPlateConnector

(また、これとは関係ありませんが_id、の名前には使用しないでくださいForeignKeys。基礎となるデータベース フィールドは ID ですが、フィールド クラス自体は、ID ではなく、実際に関連するモデル インスタンスへの参照です。)

于 2013-03-08T18:43:02.660 に答える