supponiamo di avere questo modello:Perché django's prefetch_related() funziona solo con all() e non filter()?
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 io voglio guardare un sottoinsieme di foto in un sottogruppo di album in modo efficiente. Lo faccio qualcosa di simile:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Questo fa solo due domande, che è quello che mi aspetto (uno per ottenere gli album, e poi uno come `SELECT * in foto DOVE photoalbum_id IN()
.Tutto è grande
Ma se faccio questo:.
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Poi si fa un sacco di domande con WHERE format = 1
Sto facendo qualcosa di sbagliato o è Django non è intelligente eno! Per capire che ha già recuperato tutte le foto e può filtrarle in python? Giuro di aver letto da qualche parte nella documentazione che dovrebbe farlo ...
possibile duplicato di [Filtro su prefetch \ _related in Django] (http://stackoverflow.com/questions/10915319/filter-on-prefetch-related-in-django) – akaihola