質問: queryset.filter( Q(title__icontains=keyword) | Q(text__icontains=keyword) ) return queryset ```
回答: 基本的に、各メソッドはクラスベースビュー内で勝手に呼ばれていきます。それらを自分で定義するときは、デフォルトの挙動を上書きしてカスタマイズしたい場合です。 **get_queryset**メソッドは主にListViewで使われますが、モデルインスタンスの一覧を返すメソッドです。例えばfilterメソッドで絞り込んだり、柔軟に一覧を取得したい場合はget_querysetメソッドを上書きしてそのように書きます。 **get_context_data**メソッドはテンプレートへ渡す辞書を作成するメソッドで、ほとんどのクラスベースビューがこのメソッドを持っています。辞書をカスタマイズしたい場合、テンプレートに渡す変数を増やしたい場合に上書きすることがあります。 **get**メソッドは全てのビューが持っており、一番初めに呼ばれるメソッドです(GETメソッドの場合に!)。この中でget_context_dataやrender_to_responseメソッド等が呼ばれます。 getメソッドを上書きすることは少なく、基本的にはget_queryset等のピンポイントな部分を上書きして挙動をカスタマイズするのが多いです。 質問者さんのコードですと、おそらく比較のためにわざとTemplateViewを使っていると思われますが、その処理の場合はListViewを使ってget_querysetメソッドだけ上書きするのが一般的かと思います。 元のコードだと、get_querysetメソッドがどこからも呼ばれない(TemplateViewでは呼ばれない)ので、キーワードによる絞り込みがされなくなりますね。