2014-12-04 12 views
6

Ich habe eine Situation, in der eine große Anzahl von Objekten einer bestimmten Klasse durchlaufen werden, und sie benötigen sehr viel Zeit für die Verarbeitung, da ich Daten mit select_related nicht vorauswählen kann.Wie wählt man select_related mit GenericForeignKey in django?

Die Klasse in Frage geht, wie etwas unter

from django.contrib.contenttypes.models import ContentType 
from django.db import models 

class Offer(models.Model): 
    ... 
    object_id = models.PositiveIntegerField(db_index = True) 
    content_type = models.ForeignKey(ContentType, db_index = True) 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
    ... 

ich versucht habe, wie unten select_related verwenden, aber es funktioniert offensichtlich nicht

offerList = Offer.objects.select_related('content_type', "content_object" 
    ).filter(content_type=ContentType.objects.get_for_model(SomeObject), 
    object_id=someobject.id) 

Also, wie kann ich select_related mit GenericForeignKey verwenden im Django?

+0

möglich Duplikat [Django: select \ _related und GenericRelation] (http://stackoverflow.com/questions/2939552/django-select-related -und-generische Beziehung) –

Antwort

10

Es ist nicht select_related was Sie suchen. Es ist prefetch_related, die

unterstützt Prefetching von GenericRelation und GenericForeignKey.

Daher wäre your base command sein:

Offer.objects.all().prefetch_related('content_object')

Verwandte Themen