以下示例数据库存储新闻的发布和每条新闻的相关信息。我有兴趣检索与每个新闻相关的主题。问题是,它们存储在具有复杂关系的不同表中。
在表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
的事情?
谢谢您的详细介绍!
答案 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