"django select_related" 用于多个外键关联。
"django select_related" 用于多个外键关联。
select_related如何处理具有多个外键的模型?它只选择第一个吗?
class Model:
fkey1,fkey2,fkey3 ...
文档在方法中没有提到这一点,至少我没有看到。
注意:也许只有我会感到困惑。我猜select_related只是一个性能提升器(我可以看到),但我错误地以为它是其他东西。
admin 更改状态以发布 2023年5月24日
如果您的模型具有多个外键,可以:
- 调用
.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。