2014-12-04 16 views
6

Belirli bir sınıfın çok sayıda nesnesinin üzerinde yinelendiği ve işlem için çok fazla zaman aldığı bir durum var çünkü select_related kullanarak verileri önceden seçemiyorum.Django'da GenericForeignKey ile select_related nasıl kullanılır?

söz konusu sınıf aşağıda gibi select_related kullanarak denedi

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

altına şöyle bir şey, ama açıkçası

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

Yani, nasıl GenericForeignKey ile select_related kullanabilirsiniz çalışmıyor django'da mı?

+0

olası çift [Django'ya: \ _related seçip GenericRelation] (http://stackoverflow.com/questions/2939552/django-select-related -ve-genericrelation) –

cevap

10

Ne aradığınız select_related değil. Bu,

'un, GenericRelation ve GenericForeignKey'nin önceden getirilmesini desteklediği prefetch_related dur.

Bu nedenle, your base command olacaktır:

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