在查询集中过滤空或NULL名称
我有first_name
,last_name
和alias
(可选),我需要寻找。因此,我需要一个查询来为我提供所有设置了别名的名称。
仅在我可以做的情况下:
Name.objects.filter(alias!="")
那么,什么等同于以上内容?
回答:
你可以这样做:
Name.objects.exclude(alias__isnull=True)
如果你需要排除空值和空字符串,则首选方法是将条件链接在一起,如下所示:
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
将这些方法链接在一起基本上可以独立地检查每个条件:在上面的示例中,我们排除了其中alias
为null
或空字符串的行,因此你将获得所有Name具有非空非空alias
字段的对象。生成的SQL如下所示:
SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""
你还可以将多个参数传递给的单个调用exclude
,这将确保仅将满足所有条件的对象排除在外:
Name.objects.exclude(some_field=True, other_field=True)
在此,排除其中some_field
和 other_field
为true的行,因此我们得到两个字段都不为真的所有行。生成的SQL代码看起来像这样:
SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)
另外,如果你的逻辑比这更复杂,则可以使用Django的Q对象:
from django.db.models import QName.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
以上是 在查询集中过滤空或NULL名称 的全部内容, 来源链接: utcz.com/qa/420320.html