Evitando o problema N+1 no Django ORM com prefetch_related
#Django#ORM#Performance#Python
Quando você acessa relacionamentos ManyToMany ou reversos de ForeignKey em um loop, o Django realiza uma nova consulta SQL para cada iteração (problema clássico N+1).
Exemplo rápido de resolução
queries.py
# Ruim: 1 query para autores + N queries para livros
autores = Autor.objects.all()
for autor in autores:
print([l.titulo for l in autor.livros.all()])
# Bom: Apenas 2 queries ao banco com prefetch_related