假设我有这个模型:
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中过滤它们?我发誓我在文档中的某个地方读到了应该做的...