rur*_*urp 4 python django django-models python-3.x
在过滤值列表时是否可以包含 None ?
>>> 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
Run Code Online (Sandbox Code Playgroud)
我希望最后一次调用返回 39,而不是 9。
在我的实际用例中,要过滤的值列表中可能包含也可能不包含任何内容。我可以使用 if/else 块来检查值列表中是否存在 None ,并在需要时使用 Q 对象构建查询,但对于大量过滤器这样做会变得一团糟。一定有更好的方法,对吗?
我认为你需要使用 Q 对象,这样可能就不会变得一团糟:
MyModel.objects.filter(Q(amount__isnull=True) | Q(amount__in=the_list)).count()
Run Code Online (Sandbox Code Playgroud)
并且仅包含第一部分(如果None在列表中)...
或者类似的东西:
query = Q(amount__in=the_list)
if None in the_list:
query |= Q(amount__isnull=True)
MyModel.objects.filter(query).count()
Run Code Online (Sandbox Code Playgroud)
不确定是否有更好的方法。
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |