2016-12-07 8 views
0

私はDjangoを学んでおり、Archipel - > Island - > Communityを連鎖させて、アイテムをWebサイトに公開するようにしました(コミュニティは、唯一のArchpelago)。たぶん私は間違っていたが、ここで私はコード化された方法です:私は盗んできますか複数の外部キーを使用してオブジェクトのプロパティを取得

class Product(models.Model): 
    community = models.ForeignKey(Community, on_delete=models.CASCADE) 
    island = # community->island 
    archipelago = # community->island->archipelago 
    Product_title = models.CharField(max_length=200) 
    Product_text = models.TextField() 
    Product_price = models.IntegerField(default=0) 
    Product_visible = models.BooleanField(default=False) 
    pub_date = models.DateTimeField('date published') 

次のクラスで
#models.py 
class Archipel(models.Model): 
    """docstring for Archipel.""" 
    archipel_name = models.CharField(max_length=200) 

    def __str__(self): 
     return self.archipel_name 

class Island(models.Model): 
    """docstring for Archipel.""" 
    archipel = models.ForeignKey(Archipel, on_delete=models.CASCADE) 
    island_name = models.CharField(max_length=200) 

    def __str__(self): 
     return self.island_name 


class Community(models.Model): 
    """docstring for Archipel.""" 
    island = models.ForeignKey(Island, on_delete=models.CASCADE) 
    community_name = models.CharField(max_length=200) 
    community_zipcode = models.IntegerField(default=98700) 

    def __str__(self): 
     return self.community_name 

、私は簡単のForeignKeyに、製品のおかげでコミュニティ名を取得することができます私の製品のisland_nameとarchipelagoプロパティ? 私は

island = Community.select_related('island').get() 

をしようとしたが、それは私にすべての島のクエリセットを返します。 私は "コミュニティ"を試みましたが、Djangoは、ForeignKeyオブジェクトにslelect_relatedオブジェクトがないと答えました。

答えて

0

これはドット表記を使用して行うことができます。あなたがproductオブジェクトがあるとしましょう、そしてあなたは、この

island_name = product.commuinty.island.island_name 
archipel_name = product.commuinty.island.archipel.archipel_name 
+0

多くの感謝を行うことができますが、私は解決策を中心になって、今ではそれが本当に明確なようだと書きました。私が見つけられなかった理由は、製品オブジェクト自体からではなく、コミュニティからデータを抽出しようとしていたからです。 現在の製品がクラスで定義されていないので、私のテンプレートで直接答えを使用しました: '{{product.community.island.island_name}} これは完璧です。 –

+0

私が理解しているように、community_nameを取得する唯一の理由は、Communityクラスの__str__関数のためです。 正しい方法であるドット表記でそれを抽出する方法を修正します! –

関連する問題