2013-09-21 89 views
10

我試圖優化我的查詢,但prefetch_related堅持要加入表並選擇所有字段,即使我只需要關係表中的id列表。django prefetch_related id only

queries

可以忽略第四查詢。這與問題無關。

相關代碼:

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

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

回答

14

的Django 1.7添加Prefetch objects這讓你定製預取時使用的查詢集。在這種情況下,你想要類似的東西:

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

哈哈,打得好。在這裏,有你的cookie。 :) – demux

+1

在帶有Postgres的Django 1.11中,我需要另外選擇預取對象的外鍵 - 否則Django正在爲每個預取對象進行數據庫查找以選擇外鍵(這比根本沒有預取更糟糕)。在這個例子中,修改爲:'queryset = Group.objects.all()。only('id','contact_id'))' – erikreed

+0

非常難過,它不適用於內容類型 – valignatev