select_related如何与具有多个外键的模型一起使用?它只选择第一个吗?
类型号: fkey1,fkey2,fkey3 ......
文档没有说明这一点,至少没有说明方法的位置。
答案 0 :(得分:4)
相反,文件在这个问题上非常明确。它表示默认情况下会跟踪所有ForeignKeys,但您可以为该方法提供一个字段列表,它只会遵循这些关系。
答案 1 :(得分:3)
也许我是唯一一个会感到困惑的人。我猜select_related只是一个性能助推器(我可以看到),但我错误地认为它是别的东西。
答案 2 :(得分:0)
如果您的模型具有多个外键,则可以:
.select_related()
,它将“关注” 全部 非空外键关系.select_related('foreign_key1', 'foreign_key2', ...)
,它将仅“跟随”作为参数提供的外键。请注意,“遵循FK关系”是指在执行查询(通过执行SQL连接)时选择其他相关对象数据。这样会使主查询变得更重 ,但可以避免使用N + 1 queries problem。
根据select_related
documentation,不建议使用第一种方法(不带参数),因为“可能会使基础查询更加复杂,并返回比实际需要更多的数据。”
如果您的模型与其他模型(即Book <>-- Author <>-- Hometown
)具有“嵌套”外键,则也可以按以下方式使用select_related
:
Book.select_related('author__hometown')
,它将“跟随”作者的外键(在Book模型中)和家乡的外键(在Author模型中)。如果您的模型具有要从数据库中检索的多对多或多对一关系,则应查看prefetch_related。