如何过滤Django对象以接受匹配和NULL?

时间:2015-04-14 16:33:47

标签: python django orm filter

我的模型有ForeignKey字段,null=True

字段语义是NULL条目是允许的,而非NULL条目将它绑定到外表中的单个行。

我想构建一个对应于:

的ORM过滤器
SELECT * FROM foo
WHERE foo.fk_field = ?
OR foo.fk_field IS NULL

(问号代表外表中的单个值。)

是否可以在Django ORM中执行此操作,所以我是否需要求助raw查询?

3 个答案:

答案 0 :(得分:3)

使用Q objects

from django.db.models import Q

Foo.objects.filter(Q(fk_field=fk_value) | Q(fk_field=None))

答案 1 :(得分:2)

您可以使用Q个对象实现此目的:

from django.db.models import Q

Foo.objects.filter(Q(fk=fk) | Q(fk__isnull=True))

答案 2 :(得分:0)

我认为这比其他答案更具可读性。请注意,我不确定何时开始支持它。

Foo.objects.filter(a=b) | Bar.objects.filter(c=d)