[Django] よく使うクラスベースビューのよくオーバーライドするメソッドとアトリビュート一覧(まとめ)

Djangoのクラスベースビューでは親クラスのメソッドをオーバーライドして独自の処理を追加します。

その際どのクラスベースビューによくオーバーライドするメソッドがあるかがまとまっていると便利かと思い一覧にしてまとめてみました。自分用の覚書という側面が強いので網羅性はありませんが少しでも参考になれば幸いです。

Djangoのクラスベースビュー よくオーバーライドするメソッドとアトリビュート一覧

TemplateView

クラス用途

静的ページを表示する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context

 

ListView

クラス用途

モデルデータを一覧で表示する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。

template_name = ‘foo.html’

model モデルを指定する。

querysetを設定していない場合は必須

model = FooModel
paginate_by 1ページに表示する件数を指定する。 paginate_by = 10
queryset テンプレートにクエリーセットを渡す。

(get_querysetと違い、いつも同じクエリーの時に使える)

modelを設定しない場合は必須

queryset = FooModel.objects.filter(foo=bar)
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
get_queryset テンプレートにクエリーセットを渡す。

(querysetと違い、クエリーが都度変わる時に使える)

def get_queryset(self):
    foo = FooModel.objects.filter(user=self.request.user)
    return foo

 

FormView

クラス用途

汎用的にFormを扱う。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
form_class フォームクラス名を指定する。 form_class = FooForm
success_url 処理成功時にリダイレクトさせるURLを指定する。

(get_success_urlとの使い分けはこちらの記事に記載)

success_url = reverse_lazy(‘app:index’)
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
form_valid フォームバリデーションに問題がなかった時に行う処理を記述する。
def form_valid(self, form):
    messages.success(self.request, '成功しました')
    return super().form_valid(form)
form_invalid フォームバリデーションに問題があった時に行う処理を記述する。
def form_invalid(self, form):
    message.error(self.request, "失敗しました")
    return super().form_invalid(form)

CreateView

クラス用途

モデルデータを作成する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
model モデルを指定する。

querysetを設定していない場合は必須

model = FooModel
queryset テンプレートにクエリーセットを渡す。

(get_querysetと違い、いつも同じクエリーの時に使える)

modelを設定していない場合は必須

queryset = FooModel.objects.filter(foo=bar)
success_url 処理成功時にリダイレクトさせるURLを指定する。

(get_success_urlとの使い分けはこちらの記事に記載)

success_url = reverse_lazy(‘app:index’)
fields ビューで使うフォームのフィールドを指定する。 fields = (‘field1’, field2, )
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
form_valid フォームバリデーションに問題がなかった時に行う処理を記述する。
def form_valid(self, form):
    messages.success(self.request, '成功しました')
    return super().form_valid(form)
form_invalid フォームバリデーションに問題があった時に行う処理を記述する。
def form_invalid(self, form):
    message.error(self.request, "失敗しました")
    return super().form_invalid(form)

DetailView

クラス用途

モデルデータを表示する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
model モデルを指定する。

querysetを設定していない場合は必須

model = FooModel
queryset テンプレートにクエリーセットを渡す。

(get_querysetと違い、いつも同じクエリーの時に使える)

modelを設定していない場合は必須

queryset = FooModel.objects.filter(foo=bar)
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
get_queryset テンプレートにクエリーセットを渡す。

(querysetと違い、クエリーが都度変わる時に使える)

def get_queryset(self):
    foo = FooModel.objects.filter(user=self.request.user)
    return foo

UpdateView

クラス用途

モデルデータを更新する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
model モデルを指定する。

querysetを設定していない場合は必須

model = FooModel
queryset テンプレートにクエリーセットを渡す。

(get_querysetと違い、いつも同じクエリーの時に使える)

modelを設定していない場合は必須

queryset = FooModel.objects.filter(foo=bar)
success_url 処理成功時にリダイレクトさせるURLを指定する。

(get_success_urlとの使い分けはこちらの記事に記載)

success_url = reverse_lazy(‘app:index’)
fields ビューで使うフォームのフィールドを指定する。 fields = (‘field1’, field2, )
メソッド
名称 用途 使用例
get_context_data テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
form_valid フォームバリデーションに問題がなかった時に行う処理を記述する。
def form_valid(self, form):
    messages.success(self.request, '成功しました')
    return super().form_valid(form)
form_invalid フォームバリデーションに問題があった時に行う処理を記述する。
def form_invalid(self, form):
    message.error(self.request, "失敗しました")
    return super().form_invalid(form)

get_success_url

処理成功時にリダイレクトさせるURLを指定する。

(success_urlとの使い分けはこちらの記事に記載)

def get_success_url(self):
    return reverse(‘app:detail’, kwargs={‘pk’: self.kwargs[‘pk’]})

DeleteView

クラス用途

モデルデータを削除する。

 

アトリビュート
名称 用途 使用例
template_name テンプレート名を指定する。 template_name = ‘foo.html’
model モデルを指定する。

querysetを設定していない場合は必須

model = FooModel
queryset テンプレートにクエリーセットを渡す。

(get_querysetと違い、いつも同じクエリーの時に使える)

modelを設定していない場合は必須

queryset = FooModel.objects.filter(foo=bar)
success_url 処理成功時にリダイレクトさせるURLを指定する。

(get_success_urlとの使い分けはこちらの記事に記載)

success_url = reverse_lazy(‘app:index’)
メソッド
名称 用途 使用例

get_context_data

テンプレートに辞書データを渡す。
def get_context_data(self):
    context = super().get_context_data()
    context['foo'] = FooModel.objects.get(user=self.request.user)
    return context
delete 削除処理時に何か処理を追加する。

def delete(self, request, *args, **kwargs):
    messages.success(self.request, “削除しました。”)
    return super().delete(request, *args, **kwargs)

 

sponsor