giả sử tôi có mô hình này:
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()
Bây giờ nếu tôi muốn xem một tập hợp con các bức ảnh trong một tập hợp con các album một cách hiệu quả. Tôi làm điều đó một cái gì đó như thế này:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.all()
Điều này chỉ thực hiện hai truy vấn, đó là những gì tôi mong đợi (một để lấy các album và sau đó một truy vấn như `CHỌN * TRONG ảnh WHERE photoalbum_id IN ().
Mọi thứ đều tuyệt vời.
Nhưng nếu tôi làm điều này:
someAlbums = PhotoAlbum.objects.filter(author="Davey Jones").prefetch_related("photo_set")
for a in someAlbums:
somePhotos = a.photo_set.filter(format=1)
Sau đó, nó thực hiện rất nhiều truy vấn với WHERE format = 1
! Tôi đang làm gì đó sai hay django không đủ thông minh để nhận ra rằng nó đã tìm nạp tất cả các bức ảnh và có thể lọc chúng trong python? Tôi thề là tôi đã đọc ở đâu đó trong tài liệu rằng nó phải làm điều đó ...