Python Django:按[无,其他]中的值筛选
我在这个线程中遇到了与OP相同的问题:: 我在数据对象中有一个字段,可以为null,也可以设置为 一些整数。给定一个整数,我想用 该整数值或无:Python Django:按[无,其他]中的值筛选,python,django,Python,Django,我在这个线程中遇到了与OP相同的问题:: 我在数据对象中有一个字段,可以为null,也可以设置为 一些整数。给定一个整数,我想用 该整数值或无: MyElements.objects.all().filter(value__in=[myInt, None]) # Query 1 但是,此行不适用于具有null值的元素。更多 确切地说: MyElements.objects.all().filter(value__in=[None]) # Query 2 不返回任何内容。鉴于 MyElemen
MyElements.objects.all().filter(value__in=[myInt, None]) # Query 1
但是,此行不适用于具有null值的元素。更多
确切地说:
MyElements.objects.all().filter(value__in=[None]) # Query 2
不返回任何内容。鉴于
MyElements.objects.all().filter(value = None) # Query 3
返回空值元素
如何正确重写原始查询(涉及myInt)
我知道OP已经接受了答案,但我想知道为什么
查询2
没有产生任何结果。您应该使用isnull
过滤器测试字段是否为空;否则,在SQL中,与空值相比的任何值将始终计算为false:
from django.db.models import Q
MyElements.objects.filter(Q(value=myInt) | Q(value__isnull=True))
它基于SQL规则执行。空值不是要比较的实际值。这是一个未知的值 请在此处阅读更多信息: 在Django中,您可以获得具有空值的记录,如下所示:
MyElements.objects.filter(value__isnull = True)
因此,您需要首先筛选出比较列表,然后自己将其添加到查询中
from django.db.models import Q
MyElements.objects.filter(Q(value__in = [list_of_vals]) | Q(value__isnull = True))
-毕竟,总是需要生成一个查询。