【Django(初心者向け)】これだけ覚えておこう!クラスベースビュー メソッドを徹底解説!

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2021年8月)

Django初心者の方で、「クラスベースビューを使い始めたけど、まだまだ使いこなせない!」という方も多いはず

確かに、ファンクションビューのほうが直感的でわかりやすいかもしれません

ただ、クラスベースビューを使うことで、クラスを継承メソッドを上書きすることができ、よりDRYなコードが書けるようになります

今回は「これだけ覚えておけば大概のことはできる!」というクラスベースビューのメソッドを一挙に解説していきます

クラスベースビューの基本については別記事もご用意いたしますが、当ブログでは日報アプリ制作を通じてCRUDに関するクラスベースビューを解説しています

「クラスベースビューについて詳しく知りたい!」という方はこちらをご覧ください!

ListView Basics
【5-1】3行でできるListViewの基本・書き方
DetailView
【5-2】 単純明快!クラスベースビュー「DetailView」の書き方・基本を徹底解説!
【5-3】クラスベースビュー「FormView」の基本~表示方法、データの受取から保存までを徹底解説!
【5-4】ページ名からURLを取得する「reverse」「reverse_lazy」違い、使い方を丁寧に解説!
【5-5】ModelFormクラスであっという間にできるCreateViewとUpdateView
【5-6】モデルフィールド「TextField」とモデルフィールド名を指定する「verbose_name」について
DeleteView
【5-7】DeleteViewの書き方・基本を解説

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

get_queryset

「object_list」を返すメソッド

  • ListView

【使用例】

class Sample(LitsView):

    (中略)

    def get_queryset(self):
        user_obj = self.request.user
        if user.is_authenticated:
            qs = Nippo.objects.filter(user=user_obj)
        else:
            qs = Nippo.objects.none()
        return qs

ログインしているユーザーのみ自身のデータを見れるようQuerySetを返すよう指示しています

テンプレート上で{{ object_list }}とすることでログイン中のユーザーによって違うQuerySetが渡されます

get_object

「object」を返すメソッド

  • DetailView
  • UpdateView

【使用例】

class Sample(DetailView):
    
    (中略)

    def get_object(self):
        q = User.objects.get(pk=self.kwargs["pk"])
        if not q.is_admin:
            q = "スーパーユーザーではありません"
        return q

返された値は、テンプレート上で {{ object }} とすることで受け取ることができます

上記の例ではスーパーユーザー以外の「pk」がブラウザに打ち込まれた時には “スーパーユーザーではありません” という文字列が返されるサンプルです

(プロパティ「is_admin」は、Djangoのバージョンなどによっては、「is_superuser」に置き換える必要がある場合があります)

get_context_data

HTMLテンプレートへ任意のContextを渡すメソッド

すべてのクラスベースビュー

【使用例】

class Sample(TemplateView):

    (中略)

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context["title"] = "任意なタイトル"
        return context

HTMLテンプレートへ渡すContextを返す必要があります

super()を呼び出すことで、元々備わっているContextを失わずに追加していくことをオススメします

get_success_url

  • FormView
  • CreateView
  • UpdateView

【使用例】

class Sample(FormView):

    (中略)

    def get_success_url(self):
        return reverse_lazy("user-detail", kwargs={"pk": self.request.user.pk})

フォームの送信に成功した場合のリダイレクト先を指定します

動的にリダイレクト先を変更したい場合などに使用できます

get_form_kwargs

  • FormView
  • CreateView
  • UpdateView

【使用例】

class Sample(UpdateView):
    
    (中略)

    def get_form_kwargs(self, *args, **kwargs):
        kwgs = super().get_form_kwargs(*args, **kwargs)
        kwgs["login_user"] = self.request.user
        return kwgs

クラス内で設定している「form_class」に値を渡す役割をしています

上記の例ではログインユーザーを「login_user」という変数で渡すことにより、form_class内でlogin_userへのアクセスが可能になります

まとめ

クラスビューを使いこなせない!」と感じている方も主なメソッドを覚えると、「クラスビューってこんなにカンタン!」を実感できると思います

当記事で解説したものをまとめると、

  1. QuerySetを返す「get_queryset
  2. オブジェクトを返す「get_object
  3. Contextを返す「get_context_data
  4. リダイレクト先を返す「get_success_url
  5. form_classへ値を渡す「get_form_kwargs

主にこの5つだけ覚えておけば、アプリ作成もグンとはかどるはず!

ぜひ必要な時には当ページへ戻ってきながらメソッドを使いこなしてください!

タイトルとURLをコピーしました