2016-06-28 61 views
0

自定義查詢我有2種型號:優化Django的許多一對多通過表

class ModelA: 
    fieldA = models.ManyToManyField(ModelB, through="CustomThroughTable") 

    def foobar(self): 
     return self.fieldA.through.objects.filter(fieldA=self) 

class ModelB: 
    whatever = models.CharField() 

我想實現ModelA功能,將打印出的fieldA所有的值在通過表。當前函數foobar的實現可以完成我現在需要的功能,但我認爲它效率很低。有一個更好的方法嗎?謝謝。

+0

是什麼讓你覺得它效率低下? –

+0

我使用了'debug_toolbar'來計算SQL查詢的數量,它是通過現有記錄的數量,這導致我認爲這個函數是罪魁禍首。 – 7ball

回答

1

我沒有看到任何關於該查詢的低效率,您必須更精確地調試您的問題。

也就是說,只需在直通表上使用相關名稱,就可以更簡單地(同樣有效地)實現相同的事情。

class ModelA(models.Model): 
    fieldA = models.ManyToManyField(ModelB, through="CustomThroughTable") 

class ModelB(models.Model): 
    whatever = models.CharField() 

class CustomThroughTable(models.Model): 
    modela = models.ForeignKey(ModelA, related_name="foobar") 
    modelb = models.ForeignKey(ModelB)