如何过滤查询集中的空或空名称?

我有&amp别名(可选),我需要搜索该别名。因此,我需要一个查询来提供所有具有别名集的名称

只要我能做到:

Name.objects.filter(别名!=“”)

那么,什么是上述的等价物呢

您可以这样做:

Name.objects.exclude(别名为NULL=True)

如果需要排除空值和空字符串,首选的方法是将以下条件链接在一起:

Name.objects.exclude(别名\uuuu isnull=True)。exclude(别名\uuuu exact='')

将这些方法链接在一起基本上独立地检查每个条件:在上面的示例中,我们排除了alias为null为空字符串的行,因此您可以得到所有Name对象,这些对象具有非null、非空的alias字段。生成的SQL看起来像:

从别名不为NULL的名称中选择*并选择别名!=""

您还可以将多个参数传递给对exclude的单个调用,这将确保仅排除满足每个条件的对象:

Name.objects.exclude(某些字段=True,其他字段=True)

这里,排除了某些字段其他字段为真的行,因此我们得到两个字段都不为真的所有行。生成的SQL代码看起来有点像这样:

从名称中选择*而不是(某些字段=TRUE,其他字段=TRUE)

或者,如果您的逻辑比这更复杂,您可以使用Django的Q对象:

来自django.db.models import Q的


Name.objects.exclude(Q(别名_uisnull=True)| Q(别名_uexact='')

有关更多信息,请参阅本页和Django文档中的本页

顺便说一句:我的SQL示例只是一个类比——实际生成的SQL代码看起来可能会有所不同。通过实际查看Django查询生成的SQL,您将更深入地了解Django查询的工作原理。

发表评论