首先给定一个模型Foo
,它是指向Bar
的m2m,下面的查询是如何工作的(当没有任何东西是NULL
本身时(join和first part ommited):
>> print Foo.objects.get(bar__isnull=True).query
...WHERE "barapp_bar"."id" IS NULL
空的东西让我对相关m2m的过滤感到厌烦
其次在处理大量行时,是否有方法使类似查询更快:
Foo.objects.get(bar__in=[bar1, bar2, bar3, bar4])
Tags:
指定的连接很重要。如果您查看完整的查询,您将看到Django执行两个Left Outer Joins从
foo
表到连接表foo_bar
和bar
表。你知道吗考虑两个
foos
和两个bars
。设foo_1
与bar_1
和bar_2
相关,且foo_2
与任何bars
无关。你知道吗下面的查询包含两个左外联接,至少包含一次每个
foo
,空值将出现在foo_2
的条形列中,该列与任何bars
都不相关。你知道吗对
Foo.objects.get(bar__isnull=True)
的查询与此类似,但它不从bar表中选择任何内容,对bar.id
的筛选是NULL
,因为我们只需要与任何bars
无关的foos
。你知道吗相关问题 更多 >
编程相关推荐