【问题标题】:Optimizing Django Many-To-Many Query with custom through table使用自定义通过表优化 Django 多对多查询
【发布时间】:2016-06-28 17:36:21
【问题描述】:

我有 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 的当前实现可以满足我现在的需要,但我认为它的效率相当低。有一个更好的方法吗?谢谢。

【问题讨论】:

  • 是什么让你觉得它效率低?
  • 我用debug_toolbar统计了SQL查询的数量,远远超过了现有记录的数量,这让我认为这个函数是罪魁祸首。

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


【解决方案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)

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2014-05-27
    • 2010-12-11
    相关资源
    最近更新 更多