首页 > 解决方案 > django 有效地从 3 个模型中获取数据

问题描述

我是 django 的新手,所以请多多包涵。

我有以下关系。如果我有模型 A 的主键,如何在最有效的查询中获取 A、B 和 C 的所有数据?

注意:A -> C 是一对多的关系,而B -> C 是多对一的关系(即每个C 只有1 个B,但多个C 可能有相同的B)。

我正在考虑某种形式,prefetch_related但据我了解,这意味着我正在进行 3 次分贝调用?

另外,在某个地方我可以看到 Django 运行的 SQL 查询吗?我正在使用 mysql 作为数据库。

Class A(models.Model):
    pass

Class B(models.Model):
    pass

Class C(models.Model):
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)

标签: djangopython-2.7

解决方案


您可以select_related改用:

C.objects.filter(<your filter if any>).select_related('a', 'b')

这将从数据库中检索相关字段的所有数据,a并且b在单个查询中。你可以看到prefetch_related 这里的区别。

关于你的第二个问题

在某个地方我可以看到 Django 运行的 SQL 查询吗?

是的,您可以在面板 SQL 中使用django-debug-toolbar看到它们。


推荐阅读