Djangoで動的な複数のOR検索を実装する方法

2011-06-28
このエントリーをはてなブックマークに追加

ORの数が決まっているならどうって事ないのですが、例えば複数キーワードを入力できるコンテンツ検索機能などを実装しようとすると意外と難しかったりします。

from django.db.models import Q
def search(request):

_words = (u’キーワードその位置1’, u’キーワードその位置2’)

queries = [Q(title__contains=word) for word in _words]
query = queries.pop()
for item in queries:

query |= item

_list = Entry.objects.filter(query)

キーワードのリストは検索フォームからPOSTされたものとしてください。個数は可変です。Entryというモデルに含まれるtitleというフィールドからの検索です。検索ワードが含まれるデータを検索しています。

で、ORでクエリをつないでいって、最後に検索しています。

Django1.2.3で実装、動作していますが、Qオブジェクトが使えるバージョンならどれでも動くと思います。

Tags: ,