suponha que eu tenha este modelo:
class PhotoAlbum(models.Model):
title = models.CharField(max_length=128)
author = models.CharField(max_length=128)
class Photo(models.Model):
album = models.ForeignKey('PhotoAlbum')
format = models.IntegerField()
Agora, se eu quiser olhar um subconjunto de fotos em um subconjunto de álbuns de forma eficiente. Eu faço algo assim:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Isso faz apenas duas consultas, que é o que eu espero (uma para obter os álbuns e outra como `SELECT * IN photos WHERE photoalbum_id IN ().
Tudo é bom.
Mas se eu fizer isso:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Em seguida, ele faz uma tonelada de consultas com WHERE format = 1
! Estou fazendo algo errado ou o Django não é inteligente o suficiente para perceber que já pegou todas as fotos e pode filtrá-las em python? Juro que li em algum lugar da documentação que é para fazer isso ...