Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:按[无,其他]中的值筛选_Python_Django - Fatal编程技术网

Python Django:按[无,其他]中的值筛选

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

我在这个线程中遇到了与OP相同的问题::

我在数据对象中有一个字段,可以为null,也可以设置为 一些整数。给定一个整数,我想用 该整数值或无:

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))
-毕竟,总是需要生成一个查询。