这个select_related在Django中是如何工作的?

时间:2014-03-14 19:10:20

标签: django django-queryset django-select-related

我在Django documentation中看到了关于如何使用select_related()

的示例
from django.db import models

class City(models.Model):
    # ...
    pass

class Person(models.Model):
    # ...
    hometown = models.ForeignKey(City)

class Book(models.Model):
    # ...
    author = models.ForeignKey(Person)

然后,对Book.objects.select_related('person', 'person__city').get(id=4)的调用将缓存相关的Person和相关的City

我不明白这里所做的确切query。我了解query result已预先填充。但是query(英文或sql条款)是在这里制作的。

2 个答案:

答案 0 :(得分:1)

正如您所提到的,它会预先填充querySet。也就是说,当检索到记录时,它只会触及database一次。如果您没有select_related,则会database分别拨打Book,Person and City来电,增加从1到3的通话次数。

答案 1 :(得分:0)

要显示它将执行的确切查询,请在shell中使用:

print Book.objects.select_related('person', 'person__city').get(id=4).query