supongamos que tengo 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()
Ahora, si quiero ver un subconjunto de fotos en un subconjunto de álbumes de manera eficiente. Lo hago algo como esto:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Esto hace solo dos consultas, que es lo que espero (una para obtener los álbumes y luego otra como `SELECT * IN photos WHERE photoalbum_id IN ().
Todo esta bien.
Pero si hago esto:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
¡Entonces hace un montón de consultas con WHERE format = 1
! ¿Estoy haciendo algo mal o django no es lo suficientemente inteligente como para darse cuenta de que ya ha obtenido todas las fotos y puede filtrarlas en Python? Juro que leí en algún lugar de la documentación que se supone que debe hacer eso ...