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

How to filter Django objects to accept matches and NULLs?

我有一个模型,它有一个 ForeignKey 字段,null=True

字段语义是允许 NULL 条目,而非 NULL 条目将其绑定到外部 table.

中的单个行

我想构建一个 ORM 过滤器,它对应于:

SELECT * FROM foo
WHERE foo.fk_field = ?
OR foo.fk_field IS NULL

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

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

使用Q objects:

from django.db.models import Q

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

您可以使用 Q 个对象来实现:

from django.db.models import Q

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

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

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