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)