Django的。这两个查询是否相同?

时间:2015-09-03 19:10:04

标签: django django-queryset

首先。我不知道如何写这个问题所以对SO用户更有用,也许有人可以编辑这个问题。

所以,我有这两个模型:

class A(models.Model):
    ...

class B(models.Model):
   foreign = models.Foreignkey(A)
   aproperty = models.CharField(...)

我在视图中有两种查询可能性:

b_objs = B.objects.filter(aproperty=value)
a_objs = [b.foreign for b in b_objs]

or

a_objs = A.objects.filter(b__aproperty=value)

它们同样贵吗?

1 个答案:

答案 0 :(得分:3)

它们不仅“不同等贵”,而且结果也不同。

第一种方法:您直接在B上进行查询,然后通过循环foreign获取所有b_objs。结果是一个列表。

第二种方法:您在下划线实现中执行了数据库join操作,然后获取结果。结果是一个查询集。

显然第二种方法效率更高,因为您只加入数据库一次以获取结果,而第一种方法需要多次访问数据库以获取A个对象。