django select_related用于多个外键

时间:2013-01-17 18:12:29

标签: django django-select-related

select_related如何与具有多个外键的模型一起使用?它只选择第一个吗?

类型号:   fkey1,fkey2,fkey3 ......

文档没有说明这一点,至少没有说明方法的位置。

3 个答案:

答案 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