Django-通过多个ForeignKey关系检索另一个模型中的字段

时间:2019-03-19 01:35:27

标签: python django database django-models

以下示例数据库存储新闻的发布和每条新闻的相关信息。我有兴趣检索与每个新闻相关的主题。问题是,它们存储在具有复杂关系的不同表中。

在表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中,在字段foreignKey与模型newsid之间定义了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数据库表中,每个toicid都对应一个唯一的topiclabel

我的目标是通过查询topiclabel来检索与每个NewsFeed对象关联的newsid。假设result代表一个这样的对象,我想知道是否可以做类似result.newsid.topicid.topiclabel的事情?

谢谢您的详细介绍!

2 个答案:

答案 0 :(得分:0)

尝试一下

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)

答案 1 :(得分:0)

@EvelynZ

您可以使用prefech_related来获取相关对象的值,请检查https://docs.djangoproject.com/en/2.1/ref/models/querysets/#prefetch-related