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

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」の書き方|ポイントをまとめました!
【5-8】こんなにカンタン!インポートをスッキリまとめる 整理する方法をお伝えします!

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つだけ覚えておけば、アプリ作成もグンとはかどるはず!

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

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。

>>デザナルに興味がある方はこちらからどうぞ<<

詳細をまとめた記事もございますので、ぜひご覧ください。

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました