(最終更新月:2021年8月)
Django初心者の方で、「クラスベースビューを使い始めたけど、まだまだ使いこなせない!」という方も多いはず
確かに、ファンクションビューのほうが直感的でわかりやすいかもしれません
ただ、クラスベースビューを使うことで、クラスを継承、メソッドを上書きすることができ、よりDRYなコードが書けるようになります
今回は「これだけ覚えておけば大概のことはできる!」というクラスベースビューのメソッドを一挙に解説していきます
クラスベースビューの基本については別記事もご用意いたしますが、当ブログでは日報アプリ制作を通じてCRUDに関するクラスベースビューを解説しています
「クラスベースビューについて詳しく知りたい!」という方はこちらをご覧ください!
get_queryset
「object_list」を返すメソッド
【使用例】
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」を返すメソッド
【使用例】
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
【使用例】
class Sample(FormView):
(中略)
def get_success_url(self):
return reverse_lazy("user-detail", kwargs={"pk": self.request.user.pk})
フォームの送信に成功した場合のリダイレクト先を指定します
動的にリダイレクト先を変更したい場合などに使用できます
get_form_kwargs
【使用例】
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へのアクセスが可能になります
まとめ
「クラスビューを使いこなせない!」と感じている方も主なメソッドを覚えると、「クラスビューってこんなにカンタン!」を実感できると思います
当記事で解説したものをまとめると、
- QuerySetを返す「get_queryset」
- オブジェクトを返す「get_object」
- Contextを返す「get_context_data」
- リダイレクト先を返す「get_success_url」
- form_classへ値を渡す「get_form_kwargs」
主にこの5つだけ覚えておけば、アプリ作成もグンとはかどるはず!
ぜひ必要な時には当ページへ戻ってきながらメソッドを使いこなしてください!