Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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_Python 3.x_Django Models - Fatal编程技术网

Python Django过滤器,可能不包括任何过滤器

Python Django过滤器,可能不包括任何过滤器,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,在筛选值列表时,是否有一种方法可以不包含任何值 >>> MyModel.objects.filter(amount=10).count() 9 >>> MyModel.objects.filter(amount=None).count() 30 >>> MyModel.objects.filter(amount__in=[10]).count() 9 >>> MyModel.objects.filter(amount__in

在筛选值列表时,是否有一种方法可以不包含任何值

>>> MyModel.objects.filter(amount=10).count()
9
>>> MyModel.objects.filter(amount=None).count()
30
>>> MyModel.objects.filter(amount__in=[10]).count()
9
>>> MyModel.objects.filter(amount__in=[None, 10]).count()
9
我希望最后一个电话返回39,而不是9


在我的实际用例中,要过滤的值列表中可能不包括任何值。我可以使用if/else块检查值列表中是否没有值,如果需要,可以使用Q对象构造查询,但是对大量过滤器这样做将是一个混乱。一定有更好的方法,对吗?

我认为您需要使用Q对象,可能这样不会造成混乱:

MyModel.objects.filter(Q(amount__isnull=True) | Q(amount__in=the_list)).count()
并且只有当列表中没有
None
时才包括第一部分

或者类似于:

query = Q(amount__in=the_list)
if None in the_list:
    query |= Q(amount__isnull=True)

MyModel.objects.filter(query).count()

不确定是否有更好的方法。

我不知道
|=
语法,所以至少这会有帮助。有没有解释为什么
查找中的
在iterable中对
无效?