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

发布于 2024-10-01 18:53:08 字数 618 浏览 5 评论 0原文

我正在 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%'

:超过两个单词我希望声明能够增长,按每个单词列出所有条目。

有什么想法吗?谢谢!

I'm implementing a simple LIKE search on my Django website and what I currently use is the following code:

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

Where query is a string. This results in a LIKE SQL statement and works quite okay. Now I'd also like to split my search query into terms or words:

words = query.split(' ')

So words now contains a list of words, and I'd like to achieve an SQL statement similar to:

SELECT ... FROM foo WHERE `title` ILIKE '%word1%' OR `title` ILIKE '%word2%'
  OR `content` ILIKE '%word1%' OR `content` ILIKE '%word2%'

And in case there are more than two words I'd like the statement to grow listing all entries by every word.

Any ideas? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宁愿没拥抱 2024-10-08 18:53:08
reduce(operator.or_, sequence_of_Q_objects)
reduce(operator.or_, sequence_of_Q_objects)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文