如何使用或使用 Django 的模型过滤系统?

Posted

技术标签:

【中文标题】如何使用或使用 Django 的模型过滤系统?【英文标题】:How to use OR using Django's model filter system? 【发布时间】:2011-03-11 03:07:29 【问题描述】:

似乎 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”?我似乎无法在文档中找到它(奇怪的是,搜索“或”并不是真的有用)。

【问题讨论】:

【参考方案1】:

你可以使用Q objects 来做你想做的事,通过按位或将它们组合在一起:

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

【讨论】:

以上是关于如何使用或使用 Django 的模型过滤系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中进行复杂的搜索?使用视图还是模型?

如何过滤 Django QuerySet 的相关字段“全部”或“无”

如何在 Django 查询集过滤中执行不等于?

如何在不定义内容类型或模型的情况下使用 Django 权限?

Django QuerySet - 如何“禁用”以前的过滤值

django-rest-framework- 使用“或”过滤来自一个 url 参数的多个值