Fixing N+1 queries with select_related and prefetch_related

Django N+1 Queries November 13, 2026 python

How do you fix an N+1 query problem in Django?

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ======================================================================
# Q: How do you fix an N+1 query problem in Django?
# ======================================================================

from django.db.models import Prefetch

orders = (Order.objects
          .select_related('customer')                       # JOIN (FK / OneToOne)
          .prefetch_related(
              Prefetch('items',
                       queryset=OrderItem.objects.select_related('product')))
          [:100])
# Total: 2 queries (orders JOIN customer, items JOIN product WHERE order_id IN (...))