DjangoでミリオンライブキャラクターDBを作成 ~検索処理作成~
検索処理の説明
検索用のフォーム
from django import forms from .models import Idol class IdolForm(forms.Form): name = forms.CharField(label="名前") //1
今回の検索フォームは名前での検索だけなので名前用のフィールドを作ってあげています。
ChoiceFieldとか使うと選択とかもできたり色々検索処理も色々と弄るのも楽しそう
検索用のView
def index(request): if request.method == 'GET': form = IdolForm() idols = Idol.objects.all() elif request.method == 'POST': form = IdolForm(request.POST) //1 name = request.POST['name'] //2 idols = Idol.objects.all().filter(name__contains=name) //3 return render(request, 'mysite/index.html', {'idols' : idols, 'form' : form } )
1.検索用のフォームです。
ここでformにわざわざ指定しているのは、POST時の値を検索処理後に格納するためです。
IdolFormをGETとPOSTまとめて記述しておくと初期化されてしまいます。
2. request.POST['フィールド名']で該当のフィールドの値が取得できます。
名前に入れられた値をここに格納しておきます。
3.filter(name__contains=name)はフィルター機能を使っています
初めに検索処理を行うフィールド名のnameを指定して__(アンダーバー二個)をつけて
フィルターとして実行する処理を書いていきます。
今回は入力された名前に部分一致しているものを抽出したいのでcontainsを使用しています。
nameは漢字だけの検索になるので読み仮名でも検索したいとなった場合は
from django.db.models import Q
filter(Q(name__contains=name) | Q(yomigana__contains=name))
でいけます。
こちらのサイト様が参考になります。
thinkami.hatenablog.com