さまざまな検索 (1/4)
作成:2018-01-14 08:58
更新:2018-01-14 08:58
更新:2018-01-14 08:58
■あいまい検索について
前回までの説明で、「特定の項目から値を検索するには、filterメソッドを使う」という基本はわかりました。が、「値と完全一致する項目を取り出す」というだけでは、あまり複雑な検索処理はできませんね。
filterメソッドでは、引数に用意する文の書き方でさまざまな検索が行なえます。ここで、主な検索の仕方をざっと覚えておくことにしましょう。
まずは、「あいまい検索」です。あいまい検索というのは、テキスト検索の機能の一つで、完全一致ではなく、「検索テキストを含むもの」を探す機能です。こうした、完全一致テキスト以外の検索を行うための機能としては、以下のようなものがあります。
・大文字小文字を区別しない完全一致
・値を含む検索
・値で始まるものを検索
・値で終わるものを検索
・大文字小文字を区別しない検索
これらの文をfilterの引数に指定すればいいのです。例えば、
では、前回作成した簡単な検索ページを使って、あいまい検索を使ってみましょう。index.htmlのテンプレートは前回作成したもの(nameフィールドが1つだけあるフォーム)をそのまま再利用します。hello/views.pyのindex関数を下のリスト欄のように修正して下さい。
フィールドにテキストを書いて送信すると、nameにそのテキストを含むものをすべて検索し表示します。ここでは、POST送信されたら以下のように処理を行なっています。
filterメソッドでは、引数に用意する文の書き方でさまざまな検索が行なえます。ここで、主な検索の仕方をざっと覚えておくことにしましょう。
まずは、「あいまい検索」です。あいまい検索というのは、テキスト検索の機能の一つで、完全一致ではなく、「検索テキストを含むもの」を探す機能です。こうした、完全一致テキスト以外の検索を行うための機能としては、以下のようなものがあります。
・大文字小文字を区別しない完全一致
項目名__iexact=値
・値を含む検索
項目名__contains=値
・値で始まるものを検索
項目名__startswith=値
・値で終わるものを検索
項目名__endswith=値
・大文字小文字を区別しない検索
項目名__icontains=値
項目名__istartswith=値
項目名__iendswith=値
これらの文をfilterの引数に指定すればいいのです。例えば、
filter(mail__contains='taro')とすれば、mailの値に'taro'というテキストが含まれているものをすべて検索する、というわけです。
では、前回作成した簡単な検索ページを使って、あいまい検索を使ってみましょう。index.htmlのテンプレートは前回作成したもの(nameフィールドが1つだけあるフォーム)をそのまま再利用します。hello/views.pyのindex関数を下のリスト欄のように修正して下さい。
フィールドにテキストを書いて送信すると、nameにそのテキストを含むものをすべて検索し表示します。ここでは、POST送信されたら以下のように処理を行なっています。
name_str = request.POST['name']送信されたnameフィールドの値を取り出し、それを使って、filter(name__contains=name_str) というように検索を行なっています。これで、name項目の値にname_strを含むものがすべて取り出されます。
data = Person.objects.all().filter(name__contains=name_str)
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
def index(request,num=1000): if request.method == 'POST': name_str = request.POST['name'] data = Person.objects.all().filter(name__contains=name_str) else: data = Person.objects.all() name_str = '' context = { 'current_name': name_str, 'msg': 'Personのリスト', 'data': data, } return render(request, 'hello/index.html', context)
※関連コンテンツ