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.%'

不过,我想知道有没有办法把"AND"变成"OR"?我似乎在文档中找不到它(奇怪的是,搜索‘or’并没有真正的用处).

推荐答案

您可以使用Q objects来做您想做的事情,方法是将它们按位或加在一起:

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

Django相关问答推荐

Django modelform在包含在另一个模板中时不呈现

Django 和 HTML 无法从指定时间开始视频

Django - 是否可以为查询集预取单个字段的多个过滤器?

如何将表单中的用户字段设置为当前登录的用户?

Django 表单有 Select 但也有自由文本选项?

Django RESTful API - django-piston vs. django-tastypie

Django - 站点匹配查询不存在

相关字段查找无效:​​icontains

Python / Django 中的 Unicode 与 UTF-8 混淆?

Django - 如何在其管理模块中访问模型的详细名称?

django - pisa:将图像添加到 PDF 输出

获取 Django 表单中的错误列表

在 Django 中测试different layers的最佳实践是什么?

Django中的自定义排序

在 Django 中使用 LiveServerTestCase 时使用代码登录

django - 使用 get_or_create 自动创建用户时设置用户权限

Python/Django - 避免在源代码中保存密码

Jinja2中的多级模板继承?

XlsxWriter 对象另存为 http 响应以在 Django 中创建下载

通过 django 分页仅显示部分页码