Djnagoで検索を実装していて、ちょっと困ったことがあったので、
DjangoにはデフォルトでUserクラスってデータベースのモデルが入ってる。
そのモデルの中に「性」、「名」と二つがあるんだけど、
検索をする際に、普通は「田中一」なんて入れ方をするから
文字列をどこで性と名に分ける場所が不明になる。
それで困った。
もともと性と名が一緒なら「田中」で検索して「田中一」は出るんだけどなぁ。
んで、
いろいろ探していたらQオブジェクトなるものがDjangoの中にあるらしい。
Qオブジェクトを使うことで、OR検索なんかのより複雑な検索ができるようになるとのことで、
from django.db.models import Q
from django.contrib.auth.models import User
import re
def search(req):
search_temrs = req.GET.get('search','')
if search_terms:
#空白文字があったら区切る。
p = re.compile(u"[ ]")
datas = p.split(search_terms)
for data in datas:
#一文字ずつに区切る
data = data.encode("utf_8")
char_data = list(unicode(data,"utf_8"))
for char in char_data:
char_utf = char.encode("utf_8")
#一文字ずつ性または名でOR検索をかける。
users = users.filter(Q(last_name__icontains=char_utf) | Q(first_name__icontains=char_utf))
一文字ずつ性または名でOR検索をかけるというやり方にしてみた。
もう少しスマートに書きたいところだけれどとりあえずはこれで