이 모델이 있다고 가정합니다.
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
!로 수많은 쿼리를 수행합니다 . 내가 뭘 잘못하고 있거나 장고가 이미 모든 사진을 가져 왔고 파이썬으로 필터링 할 수 있다는 것을 깨달을만큼 똑똑하지 않은가? 나는 문서의 어딘가에서 읽었을 것이라고 맹세합니다 ...