如何在Django的模型过滤系统中使用"OR"?

42
似乎Django的对象模型过滤方法自动使用AND SQL关键字。
例如:
>>> Publisher.objects.filter(name__contains="press", country__contains="U.S.A")

将自动翻译成类似以下内容:

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

然而,我想知道是否有办法实现“或者”?在文档中似乎找不到(奇怪的是,搜索“or”并不是很有用)。
2个回答

83
你可以使用 Q对象 来完成你想要做的事情,通过将它们按位或在一起:
from django.db.models import Q
Publisher.objects.filter(Q(name__contains="press") | Q(country__contains="U.S.A"))

1

没有 Q(),你也可以像下面展示的那样运行OR操作符

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接