Django SQL ИЛИ через filter () & Q (): динамический? - PullRequest
6 голосов
/ 10 ноября 2010

Я реализую простой поиск LIKE на своем веб-сайте Django, и сейчас я использую следующий код:

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

Где query - строка.Это приводит к SQL-выражению LIKE и работает вполне нормально.Теперь я также хотел бы разбить свой поисковый запрос на термины или слова:

words = query.split(' ')

Итак, words теперь содержит список слов, и я хотел бы получить SQL-выражение, похожее на:

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

И в случае, если есть более двух слов, я бы хотел, чтобы выражение увеличивалось с перечислением всех записей по каждому слову.

Есть идеи?Спасибо!

1 Ответ

11 голосов
/ 10 ноября 2010
reduce(operator.or_, sequence_of_Q_objects)
...