在 django ORM 中以这种方式访问​​对象时会有性能改进吗?

Will there be any performance improvement when accessing objects this way in django ORM?

我有两个模型,其中包含从一个到另一个的外键。

class M1(models.Model):
    name = models.TextField()

class M2(models.Model):
    name = models.TextField()
    parent = models.ForeignKey(M1, related_name='children')

我正在重构代码以提高性能。

这两个 ORM 查询之间会有任何性能差异吗?

m1 = M1.objects.get(id=1)
children = m1.children.all()

children = M2.objects.filter(parent_id=1)

Will there be any performance difference between these 2 ORM queries?

。在前者中,您进行查询以获取 M1 对象,然后为第二个对象构造一个 QuerySet。如果您稍后“消费”QuerySet,那么它将因此进行两次查询。

在后者中你只构造一个个查询集,因此如果你使用这个查询集只进行一个个查询。

如果您因此对 M1 对象不感兴趣,使用后者更好。