我在Django文档中看到了这个关于如何使用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
术语)在这里是什么
正如您提到的,它预先填充了querySet
。也就是说,当检索记录时,它只访问database
一次。如果您没有select_related
,您将单独对Book,Person and City
进行database
调用,将呼叫数量从1增加到3。
要显示它将执行的确切查询,请在shell中使用以下命令:
print Book.objects.select_related('person', 'person__city').get(id=4).query