Warum funktioniert prejetch_related () von django nur mit all () und nicht filter ()?

glaube, ich habe dieses Modell:

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()

Nun, wenn ich will, zu betrachten eine Teilmenge von Fotos in einer Untergruppe der Alben effizient. Ich Tue es so etwas wie dieses:

someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
    somePhotos = a.photo_set.all()

Dieser hat nur zwei Abfragen, die ist, was ich erwarte (um die Alben, und dann, eines wie `SELECT * Fotos, WO photoalbum_id IN ().

Alles Super.

Aber wenn ich dies Tue:

someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
    somePhotos = a.photo_set.filter(format=1)

Dann macht es eine Tonne von Abfragen mit WHERE format = 1! Mache ich etwas falsch oder ist django nicht schlau genug, um zu realisieren, hat er bereits geholt, alle Fotos und können die filter in python? Ich schwöre, ich habe irgendwo gelesen, in der Dokumentation, die Sie tun soll,...

InformationsquelleAutor der Frage Timmmm | 2012-10-19

Schreibe einen Kommentar