bu modele sahip olduğumu varsayalım:
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()
Şimdi, bir albüm alt kümesindeki bir fotoğraf alt kümesine verimli bir şekilde bakmak istersem. Bunun gibi bir şey yapıyorum:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Bu sadece iki sorgu yapar, ki bu benim beklediğim şeydir (biri albümleri almak için ve sonra da `` SELECT * IN photos WHERE photoalbum_id IN () gibi.
Her şey harika.
Ama bunu yaparsam:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Sonra bir ton sorgu yapar WHERE format = 1
! Yanlış bir şey mi yapıyorum yoksa django tüm fotoğrafları zaten getirdiğini ve onları python'da filtreleyebileceğini anlayacak kadar akıllı değil mi? Yemin ederim belgelerin bir yerinde bunu yapması gerektiğini okudum ...