我有名,姓&别名(可选),我需要搜索该别名。因此,我需要一个查询来提供所有具有别名集的名称
只要我能做到:
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查询的工作原理。