1

我从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术语)。

4

2 回答 2

1

正如您所提到的,它预先填充了querySet. 也就是说,当检索到记录时,它只命中database一次。如果您没有select_related,您将单独database拨打电话,将拨打电话Book,Person and City的次数从 1 增加到 3。

于 2014-03-14T19:21:17.867 回答
0

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

print Book.objects.select_related('person', 'person__city').get(id=4).query
于 2014-03-14T21:53:13.090 回答