przypuśćmy, że mam ten model:
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()
Teraz, jeśli chcę efektywnie przeglądać podzbiór zdjęć w podzbiorze albumów. Robię to mniej więcej tak:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Robi to tylko dwa zapytania, czego się spodziewam (jedno do uzyskania albumów, a następnie jedno w stylu `SELECT * IN photos WHERE photoalbum_id IN ().
Wszystko w porządku.
Ale jeśli to zrobię:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Następnie wykonuje mnóstwo zapytań WHERE format = 1
! Czy robię coś źle, czy też django nie jest na tyle sprytne, aby zdać sobie sprawę, że pobrał już wszystkie zdjęcia i może je filtrować w Pythonie? Przysięgam, że gdzieś w dokumentacji przeczytałem, że ma to robić ...