在文档here中,
之间似乎存在差异Blog.objects.filter(
entry__authors__isnull=False,
entry__authors__name__isnull=True)
和
Blog.objects\
.filter(entry__authors__isnull=False)\
.filter(entry__authors__name__isnull=True)
是这样的吗?
答案 0 :(得分:0)
文档试图说的是,如果在您的查询中authors
不存在,那么django将在此时返回null,然后它似乎仍会继续尝试要做isnull
但要与authors
进行比较,而不是与预期的name
进行比较,从而显示可能无效的结果。
他们在文档中显示的建议是检查作者是否为空且名称为空。
因此,在回答您的确切问题时,您显示的查询应生成相同的结果,因为它们应针对同一查询进行优化。
如果它们没有经过优化,那么由于您首先过滤掉author
不为空的所有元素
示例:
query = Blog.objects.filter(entry__authors__name__isnull=True)
案例1 - entry__authors
为空
这样可以满足条件,因为它会检查entry__authors__isnull
因此返回的结果包含没有作者的条目
案例2 - entry__authors
不是
执行支票编写,查找具有空名称的作者,返回条目确实有作者的结果,但这些作者没有名字。