我在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
条款)是在这里制作的。
答案 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