"django select_related" 用于多个外键关联。

8 浏览
0 Comments

"django select_related" 用于多个外键关联。

select_related如何处理具有多个外键的模型?它只选择第一个吗?

class Model:

fkey1,fkey2,fkey3 ...

文档在方法中没有提到这一点,至少我没有看到。

注意:也许只有我会感到困惑。我猜select_related只是一个性能提升器(我可以看到),但我错误地以为它是其他东西。

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果您的模型具有多个外键,可以:

  • 调用 .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

0
0 Comments

您可以按照以下方式在 链式 中使用 select_related

Comment.objects.select_related('user').select_related('article').all()

0