Haki Benita


All you need to know about prefetching in Django

For a better reading experience, check out this article on my website.

I have recently worked on a ticket ordering system for a conference. It was very important for the customer to see a table of orders including a column with a list of program names in each order:

The models looked (roughly) like this:

class Program(models.Model):
name = models.CharField(max_length=20)

class Price(models.Model):
program = models.ForeignKey(Program)
from_date = models.DateTimeField()
to_date = models.DateTimeField()

class Order(models.Model):
state = models.CharField(max_length=20)
items = models.ManyToManyField(Price)
  • Program is a session, lecture or a conference day.
  • Prices can change over time so we used a model called Price, modeled as a type 2 slowly changing dimension (SCD) that represents the price of a program at a certain time.
  • User’s can register to one or more programs. Each item in an Order is a program price at the time the order was made.

Before we start

Throughout this article we are going to monitor the queries executed by Django. To log the queries add the following to the LOGGING settings in settings.py:



'loggers': {
'django.db.backends': {
'level': 'DEBUG',

Let’s see you trying to find an image related to prefetching…

More by Haki Benita

Topics of interest

More Related Stories