2014-12-04 18 views
6

Ho una situazione in cui viene ripetuto un numero elevato di oggetti di una particolare classe e richiedono un'enorme quantità di tempo per l'elaborazione perché non posso preselezionare i dati utilizzando select_related.Come utilizzare select_related con GenericForeignKey in django?

La classe in questione va qualcosa come sotto

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') 
    ... 

Ho provato con select_related come qui di seguito, ma, ovviamente, non funziona

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

Così, come posso utilizzare select_related con GenericForeignKey in Django?

+0

possibile duplicato di [Django: selezionare \ _related e GenericRelation] (http://stackoverflow.com/questions/2939552/django-select-related -e-genericrelation) –

risposta

10

Non è select_related quello che stai cercando. È prefetch_related, che

supporta il prefetching di GenericRelation e GenericForeignKey.

Pertanto, your base command sarebbe:

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

Problemi correlati