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中对无无效?