I saw this example from Django documentation on how to use 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)
Then a call to Book.objects.select_related('person', 'person__city').get(id=4)
will cache the related Person
and the related City
.
I do not understand the exact query
that is made here. I understand the query
result
is pre-populated. but what query
( in english or sql
terms) is made here.
As you mentioned it pre-populates the querySet
. That is, when the record is retrieved, it hits the database
only once. If you do not have select_related
, you will be making database
calls to Book,Person and City
individually, increasing the number of calls made from 1 to 3.