Angenommen, 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 eine Teilmenge von Fotos in einer Teilmenge von Alben effizient betrachten möchte. Ich mache es so ähnlich:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Dies führt nur zwei Abfragen aus, was ich erwarte (eine, um die Alben zu erhalten, und eine wie `SELECT * IN photos WHERE photoalbum_id IN ().
Alles ist großartig.
Aber wenn ich das mache:
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 Menge Abfragen mit WHERE format = 1
! Mache ich etwas falsch oder ist Django nicht klug genug, um zu erkennen, dass es bereits alle Fotos abgerufen hat und sie in Python filtern kann? Ich schwöre, ich habe irgendwo in der Dokumentation gelesen, dass es das tun soll ...