如何在Django模型过滤系统中使用“OR”?

42 投票
2 回答
19099 浏览
提问于 2025-04-16 00:44

看起来Django的对象模型过滤方法默认会使用AND这个SQL关键字。

举个例子:

>>> Publisher.objects.filter(name__contains="press", country__contains="U.S.A")

这段代码会自动转换成类似下面这样的SQL语句:

SELECT ... 
FROM publisher
WHERE name LIKE '%press%'
AND country LIKE '%U.S.A.%'

不过,我在想有没有办法使用OR呢?我在文档里找不到相关的信息(奇怪的是,搜索'或'并没有什么用)。

2 个回答

1

不使用 Q() 的话,你也可以像下面这样使用OR 操作符

Publisher.objects.filter(name__contains="press") | \
Publisher.objects.filter(country__contains="U.S.A")
83

你可以使用 Q对象 来实现你想要的功能,方法是将它们进行按位或运算(bitwise OR):

from django.db.models import Q
Publisher.objects.filter(Q(name__contains="press") | Q(country__contains="U.S.A"))

撰写回答