我有以下代码:
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
,另一个用于获取此作者的书籍。
我是对的吗?如果是这样,有没有办法只用一个查询得到相同的结果?
答案 0 :(得分:2)
是的,如果您尚未通过直接访问该实例获取self.author
,或者在您最初提取该图书时使用select_related
,则会涉及两个查询。
但是,您根本不需要作者对象:图书模型直接包含一个基础author_id
字段,您可以使用该字段:
return Book.objects.filter(author=self.author_id)
这只会产生一个查询。