2013-09-21 11 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

ジャンゴ1.7を使用すると、プリフェッチするときに使用されるクエリセットをカスタマイズできPrefetch objectsを追加しました。この場合、次のようなものが必要です。

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

lol、よく再生されます。ここで、あなたのクッキーを持ってください。 :) – demux

+1

PostgresのDjango 1.11では、プリフェッチされたオブジェクトの外部キーをさらに選択する必要がありました。そうでなければ、Djangoは各プリフェッチされたオブジェクトに対して外部キーを選択するDBルックアップを行っていました(プリフェッチなしより悪い)。この例では、変更は次のようになります: 'queryset = Group.objects.all()。only( 'id'、 'contact_id'))' – erikreed

+0

それはコンテンツタイプではうまくいかない – valignatev

関連する問題