在django ORM中以这种方式访问对象会有任何性能改进吗?
我有两个模型,其中包含从一个到另一个的ForeignKey在django ORM中以这种方式访问对象会有任何性能改进吗?,django,django-models,django-rest-framework,django-views,django-orm,Django,Django Models,Django Rest Framework,Django Views,Django Orm,我有两个模型,其中包含从一个到另一个的ForeignKey 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.ge
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()
及
这两个ORM查询之间是否存在性能差异
是。在前者中,您进行查询以获取M1
对象,然后为第二个对象构造QuerySet
。如果您以后“使用”了QuerySet
,那么它将进行两次查询
在后者中,您只构造一个queryset,因此,如果使用queryset,则只进行一个查询
因此,如果您对M1
对象不感兴趣,那么使用后者会更好
children = M2.objects.filter(parent_id=1)