如何在Django模型过滤系统中使用“OR”?
看起来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"))