2013-09-21 16 views
10

Próbuję zoptymalizować moje zapytania, ale prefetch_related nalega na dołączenie do tabel i wybranie wszystkich pól, mimo że potrzebuję tylko listy identyfikatorów z tabeli powiązań.django prefetch_related id tylko

queries

można ignorować 4th zapytania. Nie jest to związane z pytaniem.

Powiązane Kod:

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

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

Odpowiedz

14

Django 1.7 dodaje Prefetch objects który pozwoli Ci dostosować queryset używanego podczas preselekcji. W takim przypadku chcesz coś takiego:

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

lol, dobrze grałem. Tutaj masz swój plik cookie. :) – demux

+1

W Django 1.11 z Postgresiem, musiałem dodatkowo wybrać klucz obcy z obiektu wstępnie pobranego - w przeciwnym razie Django wykonywał przeszukiwanie bazy danych dla każdego wstępnie pobranego obiektu, aby wybrać klucz obcy (który jest gorszy niż brak wstępnego pobrania w ogóle). W tym przykładzie modyfikacja byłaby następująca: 'queryset = Group.objects.all(). Only ('id', 'contact_id'))' – erikreed

+0

Bardzo smutne, że nie działa z typami treści – valignatev

Powiązane problemy