3
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() ここで、アルバムのサブセット内の写真のサブセットを効率的に見たい場合。私はそれを次のようにします: someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set") for a in someAlbums: somePhotos = a.photo_set.all() これは2つのクエリのみを実行します。これは私が期待するものです(1つはアルバムを取得し、もう1つは `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) …