2016-06-28 58 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)