libro
www.tuyano.com
初心者のためのDjango 2.0入門

さまざまな検索 (1/4)

作成:2018-01-14 08:58
更新:2018-01-14 08:58

■あいまい検索について

前回までの説明で、「特定の項目から値を検索するには、filterメソッドを使う」という基本はわかりました。が、「値と完全一致する項目を取り出す」というだけでは、あまり複雑な検索処理はできませんね。
filterメソッドでは、引数に用意する文の書き方でさまざまな検索が行なえます。ここで、主な検索の仕方をざっと覚えておくことにしましょう。

まずは、「あいまい検索」です。あいまい検索というのは、テキスト検索の機能の一つで、完全一致ではなく、「検索テキストを含むもの」を探す機能です。こうした、完全一致テキスト以外の検索を行うための機能としては、以下のようなものがあります。

・大文字小文字を区別しない完全一致
項目名__iexact=値

・値を含む検索
項目名__contains=値

・値で始まるものを検索
項目名__startswith=値

・値で終わるものを検索
項目名__endswith=値

・大文字小文字を区別しない検索
項目名__icontains=値
項目名__istartswith=値
項目名__iendswith=値

これらの文をfilterの引数に指定すればいいのです。例えば、
filter(mail__contains='taro')
とすれば、mailの値に'taro'というテキストが含まれているものをすべて検索する、というわけです。

では、前回作成した簡単な検索ページを使って、あいまい検索を使ってみましょう。index.htmlのテンプレートは前回作成したもの(nameフィールドが1つだけあるフォーム)をそのまま再利用します。hello/views.pyindex関数を下のリスト欄のように修正して下さい。

フィールドにテキストを書いて送信すると、nameにそのテキストを含むものをすべて検索し表示します。ここでは、POST送信されたら以下のように処理を行なっています。
name_str = request.POST['name']
data = Person.objects.all().filter(name__contains=name_str)
送信されたnameフィールドの値を取り出し、それを使って、filter(name__contains=name_str) というように検索を行なっています。これで、name項目の値にname_strを含むものがすべて取り出されます。

※プログラムリストが表示されない場合

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)

※関連コンテンツ

「初心者のためのDjango 2.0入門」に戻る