在此线程中,我有与OP相同的问题:Django - filtering by "certain value or None":
我在数据对象中有一个字段,该字段可以为null或设置为 一些整数。我想给定一个整数,以过滤所有对象 该整数值或无:
MyElements.objects.all().filter(value__in=[myInt, None]) # Query 1
但是,此行不适用于具有空值的元素。更多 恰好:
MyElements.objects.all().filter(value__in=[None]) # Query 2
不返回任何内容。而
MyElements.objects.all().filter(value = None) # Query 3
返回空值元素。
如何正确重写原始查询(涉及myInt)?
我知道OP已经接受了答案,但是我想知道为什么 Query 2
没有产生任何结果。
答案 0 :(得分:2)
它基于用于执行的SQL规则。 NULL值不是要比较的实际值。这是一个未知的价值。
在此处详细了解:is null vs == null
在Django中,您可以获得带有NULL值的记录,如下所示:
MyElements.objects.filter(value__isnull = True)
因此,您需要先从比较列表中过滤None
,然后自己将其添加到查询中。
from django.db.models import Q
MyElements.objects.filter(Q(value__in = [list_of_vals]) | Q(value__isnull = True))
答案 1 :(得分:1)
您应该使用isnull
过滤器来测试字段是否为空;否则,在SQL中,与空值相比的任何值都将始终为false:
from django.db.models import Q
MyElements.objects.filter(Q(value=myInt) | Q(value__isnull=True))