【Django】検索機能の実装

https://docs.djangoproject.com/ja/3.1/topics/class-based-views/

1.検索画面の実装

FormViewを使用して実装する。

FormView

1-1)forms.py:検索フォームの定義

以下ドキュメント。

Django の Form クラス

class Form

Formで定義するField(項目)について、以下を参照。

Form fields

目的に応じた、検索用のフォームをforms.pyに定義する。

from django.forms import Form
 :
class UserSearchForm(Form):
    name = forms.CharField(
        initial='',
        label='名前',
        required = False,
        max_length=32,
    )
  :

1-2)view.py:拡張FormViewの定義

FormViewをカスタマイズしたクラスを、以下のような感じで作成する。

from django.forms import Form
 :
class UersSearchView(FormView):
    template_name = 'app/search.html'
    form_class = UserSearchForm
    success_url = '/user_list/'  # 2のListViewで定義
   :

1-3)url.pyの定義

urlpatternsに、定義を追加。

 :
from app.views import UersSearchView
 :
urlpatterns = [
   :
    path('search/', UserSearchView.as_view(
            extra_context=
            {
                'title':'検索',
         :
            },
        ), name='search'),
   :
]
 :

2.結果表示

ListViewを使用して実装する。

ListView

ドキュメントを参考に簡単に実装はできる。

3.同じページに結果を表示する

検索条件と結果を同じページに表示したい場合にどうするか?

色々調べて検討した結果、クラスベースのViewでやる場合、FormとListViewを組み合わせた新たなViewを作る必要がある。

ということで、作りました。