首先。我不知道如何写这个问题所以对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)
它们同样贵吗?
答案 0 :(得分:3)
它们不仅“不同等贵”,而且结果也不同。
第一种方法:您直接在B
上进行查询,然后通过循环foreign
获取所有b_objs
。结果是一个列表。
第二种方法:您在下划线实现中执行了数据库join
操作,然后获取结果。结果是一个查询集。
显然第二种方法效率更高,因为您只加入数据库一次以获取结果,而第一种方法需要多次访问数据库以获取A
个对象。