2016-07-21 36 views
0

鑑於以下模型,我想提高過濾器的性能以避免不必要的DB調用。prefetch_related with nest m2m

class A(models.Model): 
    name = models.CharField() 
    b = ManyToManyField(B) 

class B(models.Model): 
    c = ManyToManyField(C) 

class C(models.Model): 
    d = ManyToManyField(D) 

class D(models.Model): 
    foo = models.TextField() 

我怎麼能與prefetch_related實現這一目標?

''.join(A.objects.filter(b__c__d=self.d).prefetch_related('?? ??').values_list('name', flat=True))

+0

沒有'prefetch_related'應該只使用一個查詢。這是你能做的最好的事情。 – Brian

回答

0

它的工作方式與您的過濾器(b__c__d)類似。只需預取:

''.join(A.objects.filter(b__c__d=self.d).prefetch_related('b__c__d').values_list('name', flat=True))