如何通过django中的多级反向外键获取相关对象查询集?

Posted

技术标签:

【中文标题】如何通过django中的多级反向外键获取相关对象查询集?【英文标题】:How to get a related objects queryset through multiple levels of reverse foreignkeys in django? 【发布时间】:2018-02-14 10:43:52 【问题描述】:

我有一个模型:

class Publisher(models.Model):
    ...

class Author(models.Model):
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

class Article(models.Model):
    author= models.ForeignKey(Author, on_delete=models.CASCADE)

现在我正在尝试从给定的发布者“pub”获取所有文章。 我尝试过以下操作:

pub.article_set()

pub.authot_set().article_set()

以及其他失败的尝试。那么如何在不多次访问数据库的情况下检索给定出版商的所有文章的查询集呢?最有效的方法是什么?

提前致谢!

【问题讨论】:

【参考方案1】:

减少数据库查询数量的最有效方法是过滤文章的查询集。

# pub is the instance of Publisher
articles = Article.objects.filter(author__publisher=pub)

【讨论】:

以上是关于如何通过django中的多级反向外键获取相关对象查询集?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过Django中的prefetch_related过滤具有多个条件的反向外键

django模型,如何动态设置查询的字段?

Django 访问值对象中的反向外键数据

使用Django ORM查询如何注释是不是存在多级外键层次结构

Django:通过相关对象访问外键

Django外键:获取相关模型?