предположим, у меня есть такая модель:
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()
Теперь, если я хочу эффективно просматривать подмножество фотографий в подмножестве альбомов. Я делаю это примерно так:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
При этом выполняется только два запроса, как я и ожидал (один для получения альбомов, а второй - типа `SELECT * IN photos WHERE photoalbum_id IN ().
Все прекрасно.
Но если я сделаю это:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Затем он выполняет множество запросов с помощью WHERE format = 1
! Я что-то делаю не так или django недостаточно умен, чтобы понять, что он уже получил все фотографии и может фильтровать их в python? Клянусь, я где-то читал в документации, что он должен это делать ...