使用自定义表格优化Django多对多查询

时间:2016-06-28 17:36:22

标签: python sql django orm many-to-many

我有2个型号:

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的当前实现完成了我现在所需要的,但我认为它效率很低。有一个更好的方法吗?感谢。

1 个答案:

答案 0 :(得分: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)