考虑我有一个名为Subject的模型,我想根据值列表筛选值。请考虑以下列表。
["John", "Brad", None]
当我尝试使用__in查找来过滤结果时,它不会查找None值。例如
Subject.objects.filter(user__in=["John", "Brad", None])
这将为John和Brad提供查询集,但不会提供None。我在这里缺少什么?有人能帮我吗
NULL数据库中的s(django中的None
(不是必需值,因此它们需要不同的方法:
Subject.objects.filter(Q(user__in=["John", "Brad", ]) | Q(user__isnull=True,))
尝试像这样的过滤
from django.db.models import Q
Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
使用Q对象更适合于此:
Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
您可以将Q objects
用于OR, AND and NOT
操作。Q对象为您提供了对查询的where子句的完全控制。
您的查询集将类似于:
from django.db.models import Q
Subject.objects.filter(Q(user=None) | Q(user__in=["John", "Brad"]))
您可以以更复杂的方式组合Q对象以生成复杂的查询。