2013-09-21 31 views
10

Tôi đang cố gắng tối ưu hóa truy vấn của mình nhưng prefetch_related khẳng định khi tham gia các bảng và chọn tất cả các trường ngay cả khi tôi chỉ cần danh sách các id từ bảng quan hệ.django prefetch_related id chỉ

queries

Bạn có thể bỏ qua truy vấn thứ tư. Nó không liên quan đến câu hỏi.

Mã liên quan:

class Contact(models.Model): 
    ... 
    Groups = models.ManyToManyField(ContactGroup, related_name='contacts') 
    ... 

queryset = Contact.objects.all().prefetch_related('Groups') 

Trả lời

14

Django 1,7 thêm Prefetch objects mà cho phép bạn tùy chỉnh các queryset sử dụng khi tìm nạp trước. Trong trường hợp này, bạn muốn một cái gì đó như:

queryset = Contact.objects.all().prefetch_related(
    Prefetch('Groups', queryset=Group.objects.all().only('id'))) 
+1

lol, được phát. Ở đây, có cookie của bạn. :) – demux

+1

Trong Django 1,11 với Postgres, tôi cần phải chọn thêm khóa ngoài của đối tượng được tìm nạp trước - nếu không Django đã thực hiện tra cứu DB cho từng đối tượng được tìm nạp trước để chọn khóa ngoài (điều này tệ hơn là không tìm nạp trước). Trong ví dụ này, sửa đổi sẽ là: 'queryset = Group.objects.all(). Only ('id', 'contact_id'))' – erikreed

+0

Rất buồn vì nó không hoạt động với các kiểu nội dung – valignatev

Các vấn đề liên quan