相关疑难解决方法(0)

为什么django的prefetch_related()只能用于all()而不能用于filter()?

假设我有这个模型:

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()
Run Code Online (Sandbox Code Playgroud)

现在,如果我想有效地查看相册子集中的一部分照片.我这样做:

someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
    somePhotos = a.photo_set.all()
Run Code Online (Sandbox Code Playgroud)

这只做了两个查询,这是我所期望的(一个是获得专辑,然后是一个像`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)
Run Code Online (Sandbox Code Playgroud)

然后它做了大量的查询WHERE format = 1!我做错了什么或django不够聪明,意识到它已经取出所有的照片并可以在python中过滤它们?我发誓我在文档中的某个地方读到它本应该这样做......

django orm filter prefetch

81
推荐指数
2
解决办法
6万
查看次数

标签 统计

django ×1

filter ×1

orm ×1

prefetch ×1