select_related 如何与具有多个外键的模型一起使用?它只是选择第一个吗?
类模型:fkey1、fkey2、fkey3...
文档没有说明这一点,至少没有在指定方法的地方说明。
注意:也许我是唯一会感到困惑的人。我猜 select_related 只是一个性能提升器(我可以看到),但我错误地认为它是别的东西。
select_related 如何与具有多个外键的模型一起使用?它只是选择第一个吗?
类模型:fkey1、fkey2、fkey3...
文档没有说明这一点,至少没有在指定方法的地方说明。
注意:也许我是唯一会感到困惑的人。我猜 select_related 只是一个性能提升器(我可以看到),但我错误地认为它是别的东西。
您可以select_related
在链中使用如下
Comment.objects.select_related('user').select_related('article').all()
相反,文件对此事非常清楚。它说默认情况下所有 ForeignKeys 都被遵循,但你可以给方法一个字段列表,它只会遵循这些关系。
如果您的模型有多个外键,您可以:
.select_related()
,它将“遵循”所有 非空外键关系.select_related('foreign_key1', 'foreign_key2', ...)
,它只会“跟随”作为参数提供的外键。请注意,“遵循 FK 关系”意味着在执行查询时(通过执行 SQL 连接)选择其他相关对象数据。这将使主查询更重,但可以用来避免N+1 查询问题。
根据select_related
文档,不推荐使用第一种方法(不带参数),因为“它可能会使底层查询更复杂,并返回比实际需要更多的数据”。
如果您的模型具有与其他模型(即Book <>-- Author <>-- Hometown
)“嵌套”的外键,您也可以使用select_related
如下:
Book.select_related('author__hometown')
,它将“跟随”作者的外键(在 Book 模型中)和家乡的外键(在 Author 模型中)。如果您的模型具有您想从数据库中检索的多对多或多对一关系,您应该查看prefetch_related。