Django - извлечение полей в другой модели с помощью нескольких связей ForeignKey - PullRequest
0 голосов
/ 19 марта 2019

В следующем примере базы данных хранятся сообщения о новостях и соответствующая информация для каждой новости.Я заинтересован в поиске тем, связанных с каждой новостью.Проблема в том, что они хранятся в разных таблицах со сложными отношениями.

Каждой новости присваивается newsid в таблице NewsFeed:

class NewsFeed(models.Model):
      newsid= models.OneToOneField('NewsSub', 
                   on_delete=models.CASCADE, db_column='newsid', 
                   primary_key=True)

      def __str__(self):
        return str(self.newsid)

Один-к-одномуодна связь определена между полем newsid в классе NewsFeed и моделью NewsSub:

class NewsSub(models.Model):
      newsid = models.BigIntegerField(primary_key=True)

В другом классе NewsTopic между полем * установлена ​​связь foreignKey1016 * с моделью NewsSub:

class NewsTopic(models.Model):
      newsid = models.ForeignKey(NewsSub, on_delete=models.DO_NOTHING, 
             db_column='newsid')
      topicid = models.ForeignKey(NewsLabel, on_delete=models.DO_NOTHING, 
             db_column='topicid', related_name = 'topic')

В таблице NewsTopic db каждый newsid может соответствовать более чем одному topicid.Наконец, поле topicid класса NewsTopic относится к модели NewsLabel:

class NewsLabel(models.Model):
      topicid = models.BigIntegerField(primary_key=True)
      topiclabel = models.CharField(max_length=100)

      def __str__(self):
        return self.topiclabel

В таблице NewsLabel db каждый toicid соответствует уникальному topiclabel.

Моя цель - получить topiclabel (s), связанные с каждым NewsFeed объектом, запросив newsid.Предположим, result представляет один из таких объектов, мне интересно, возможно ли сделать что-то вроде result.newsid.topicid.topiclabel?

Спасибо и простите за длинные описания !!

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

@ EvelynZ

Вы можете использовать prefech_related для получения значений связанного объекта, пожалуйста, отметьте https://docs.djangoproject.com/en/2.1/ref/models/querysets/#prefetch-related

0 голосов
/ 19 марта 2019

Попробуйте это

news_id = 1234567890
news_sub_instance = NewsSub.objects.get(newsid=news_id)

topic_labels = news_sub_instance.newstopic_set.values_list('topicid__topiclabel', flat=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...