припустимо, у мене є така модель:
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? Клянусь, я десь у документації читав, що це повинно робити ...