Django SQL OR 通过 filter() & Q() : Dynamic?

标签 django django-queryset django-q

我正在我的 Django 网站上实现一个简单的 LIKE 搜索,我目前使用的是以下代码:

from django.db.models import Q
posts = Post.objects.filter(Q(title__icontains=query)|Q(content__icontains=query))

哪里query是一个字符串。这会导致 LIKE SQL 语句并且工作正常。现在我还想将我的搜索查询拆分为术语或单词:
words = query.split(' ')

所以words现在包含一个单词列表,我想实现一个类似于以下内容的 SQL 语句:
SELECT ... FROM foo WHERE `title` ILIKE '%word1%' OR `title` ILIKE '%word2%'
  OR `content` ILIKE '%word1%' OR `content` ILIKE '%word2%'

如果有两个以上的单词,我希望该语句能够按每个单词列出所有条目。

有任何想法吗?谢谢!

最佳答案

reduce(operator.or_, sequence_of_Q_objects)

关于Django SQL OR 通过 filter() & Q() : Dynamic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147383/

相关文章:

python - 如何为 django QuerySet 的每个条目添加一些上下文

Django:__in 查询查找不维护查询集中的顺序

python - 为什么切片 Django 查询集返回一个列表

python - 使用 Django 的 Q 查询过滤多对多关系

python - 如何为 Django Q 对象动态加入多个参数

Django:如何修复 RelatedOjbectDoesNotExist 异常?

django - 对于非管理员用户来说,什么是好的 Django 文件浏览器?

python - 相关对象上的多个注释

Django SelectDateWidget 不保存日期

python - Django Q 过滤器未按预期工作