Django:通过外键过滤减少查询数量

时间:2014-08-05 08:40:21

标签: python django django-models django-orm

我有以下代码:

class Book(models.Model):
    author = models.ForeignKey(Author)

    def get_books_for_same_author(self):
        return Book.objects.filter(author = self.author)

在致电get_books_for_same_author时,我的常识告诉我发出了2个数据库查询 - 一个用于获取self.author,另一个用于获取此作者的书籍。

我是对的吗?如果是这样,有没有办法只用一个查询得到相同的结果?

1 个答案:

答案 0 :(得分:2)

是的,如果您尚未通过直接访问该实例获取self.author,或者在您最初提取该图书时使用select_related,则会涉及两个查询。

但是,您根本不需要作者对象:图书模型直接包含一个基础author_id字段,您可以使用该字段:

return Book.objects.filter(author=self.author_id)

这只会产生一个查询。