django有效地从3个模型中获取数据

时间:2018-07-05 16:03:40

标签: django python-2.7

我是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)

1 个答案:

答案 0 :(得分:0)

您可以改用select_related

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

这将在一次查询中从数据库中检索相关字段ab的所有数据。您可以看到与prefetch_related here的区别。

关于第二个问题

  

有什么地方可以看到Django运行的SQL查询吗?

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