2016-12-07 4 views
0

Я изучаю Django, и я подключил разные классы Archipel -> Island -> Community, чтобы локализовать элементы, которые будут опубликованы на веб-сайте (Сообщества принадлежат только одному острову, который принадлежит тонне только один Архипелаг). Может быть, я ошибаюсь, но вот как я закодированы:Получить свойство объекта через несколько внешних ключей

#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:

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') 

Как я могу извлечь island_name и свойство архипелага моего продукта? Я попытался

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

но он возвращает мне QuerySet всех островов. Итак, я попробовал «сообщество», но Django отвечает, что объект ForeignKey не имеет объекта slelect_related.

ответ

0

Вы можете сделать это, используя dotnotation. Пусть у вас есть 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, - это моя функция __str__ в классе сообщества. Я исправлю способ, которым я извлек его с помощью правильного пути! –

Смежные вопросы