supponiamo di avere questo modello:
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()
Ora, se voglio guardare un sottoinsieme di foto in un sottoinsieme di album in modo efficiente. Lo faccio qualcosa del genere:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Questo fa solo due query, che è quello che mi aspetto (una per ottenere gli album, e poi una come `SELECT * IN photos WHERE photoalbum_id IN ().
È tutto bellissimo.
Ma se lo faccio:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Quindi fa un sacco di domande con WHERE format = 1
! Sto facendo qualcosa di sbagliato o django non è abbastanza intelligente da rendersi conto che ha già recuperato tutte le foto e può filtrarle in Python? Giuro di aver letto da qualche parte nella documentazione che dovrebbe farlo ...