Django - 按“特定值或空值”进行过滤

17

我有一个数据对象中的字段,它可以是空值或者设置为某个整数。我想根据给定的整数,过滤出所有具有该整数值或没有该值的对象:

MyElements.objects.all().filter(value__in=[myInt, None])

然而,这条代码对于具有空值的元素无效。更准确地说:
MyElements.objects.all().filter(value__in=[None])

返回空值。而

MyElements.objects.all().filter(value = None)

返回空值元素。

我应该如何正确重写原始查询(涉及myInt)?

2个回答

18
你可以使用 Q 对象 来组合多个条件查询,用于 Django 的 querysets。
你的查询集应该像这样:
from django.db.models import Q
MyElements.objects.all().filter(Q(value=None) | Q(value=myInt))

谢谢你们两个,我之前不知道 Q 值。 - Gadi A
in 在可迭代对象中查找 None 为什么不起作用,有什么解释吗? - hashlash

7
您可以尝试使用OR语句:
from django.db.models import Q
MyElements.objects.filter(Q(value__isnull=True) | Q(value=myInt))

django documentation


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接