如果字段为空或空字符串,如何过滤?

时间:2018-01-23 04:20:47

标签: python django

当字段为空或空字符串时如何过滤字段?

我只能检查它何时为空:

DataDictionary.objects.filter(parentlevel__isnull=True) 

Null或null字符串怎么样?

2 个答案:

答案 0 :(得分:0)

要回答文字问题,您可以使用Q个对象将空字符串添加到过滤器查询中:

from django.db.models import Q
q = Q(parentlevel__isnull=True)
q |= Q(parentlevel='')
DataDictionary.objects.filter(q)

但是,为了回答问题背后的问题,文档建议首先通过不同地初始化字段来避免这种尴尬的情况:

  

避免在基于字符串的字段(例如CharFieldTextField)上使用null。如果基于字符串的字段具有null=True,则表示它有两个可能的值为"没有数据":NULL,以及空字符串。在大多数情况下,为"没有数据提供两个可能的值是多余的;" Django约定是使用空字符串,而不是NULL。

因此,我建议您在DataDictionary模型上进行此更改,并添加相应的数据迁移以将空值转换为空字符串。

答案 1 :(得分:0)

您可以使用Q组合查询,如下所示:

DataDictionary.objects.filter(Q(parentlevel__isnull=True) | Q(parentlevel=''))