the dawn of yuriko hisory

アニメやら漫画関係で何か作りたいものと勉強したことのメモ用

DjangoでミリオンライブキャラクターDBを作成 ~検索処理作成~

現在までの完成形

https://i.gyazo.com/8ff55ceb5bc1e37f1249f487b0408c31.png

検索処理の説明

検索用のフォーム
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

次やること

とりあえずあとは徐々に修正しつつでいいかなーと思っています。
APIJSON形式にしてViewModelを~とも思っていたのですが
結局やらずに作成してしまいました。
Ajax周りの処理とかも勉強しておきたいとは思っているのですが。

とりあえず今回はこれで完了ということで次また何か作ります。