Я изучаю 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.
Большое спасибо, я повернулся к решению, и теперь вы написали, что это действительно кажется ясным. Причина, по которой я не обнаружил, заключалась в том, что я пытался извлечь данные из сообщества, а не из самого продукта продукта. Для тех, кто может помочь, поскольку текущий продукт не определен в классе, я использовал ответ прямо в моем шаблоне: '{{product.community.island.island_name}}' Просто отлично, снова большое спасибо! –
Как я понимаю, единственная причина, по которой я получаю имя community_name, - это моя функция __str__ в классе сообщества. Я исправлю способ, которым я извлек его с помощью правильного пути! –