Python 过滤器语法的差异
在文档中,这两种方法似乎有所不同Python 过滤器语法的差异,python,django,Python,Django,在文档中,这两种方法似乎有所不同 Blog.objects.filter( entry__authors__isnull=False, entry__authors__name__isnull=True) 以及: 是这样吗?文档试图说明的是,如果查询中的作者不存在,django将在此时返回null,然后它似乎仍将继续尝试执行isnull,但与作者进行比较,而不是与预期的姓名进行比较,从而显示出潜在的无效结果 他们在文档中给出的建议是检查作者是否为null以及姓名是否为null
Blog.objects.filter(
entry__authors__isnull=False,
entry__authors__name__isnull=True)
以及:
是这样吗?文档试图说明的是,如果查询中的
作者
不存在,django将在此时返回null,然后它似乎仍将继续尝试执行isnull
,但与作者
进行比较,而不是与预期的姓名
进行比较,从而显示出潜在的无效结果
他们在文档中给出的建议是检查作者是否为null以及姓名是否为null
因此,为了回答您的确切问题,您显示的查询应该会产生相同的结果,因为它们应该针对相同的查询进行优化
如果没有对它们进行优化,那么仍然会产生相同的结果,因为您首先过滤掉作者不为null的所有元素
例如:
query = Blog.objects.filter(entry__authors__name__isnull=True)
案例1-条目作者
为空
这将满足条件,因为它将检查entry\uuuuu authors\uuuu isnull
,因此返回的结果中包含没有作者的条目
案例2-条目作者
不为空
以书面形式执行检查,查找名称为空的作者,返回条目中确实有作者但这些作者没有姓名的结果。您指的是文档的哪一部分?我可以想象,结果查询与这些查询没有任何区别,正如您想象的那样。但是,在我的问题中给出的链接中,稍后阅读,有一个“列侬”的示例,我希望它能帮助理解我为什么发布这样一个奇怪的问题。非常感谢,很好的解释。
query = Blog.objects.filter(entry__authors__name__isnull=True)