VIEW内で使用するメソッドについて調べてみたので内容を整理しました。
VIEW内で使用するメソッド一覧(よく使うもの)
メソッド名 | 機能 |
---|---|
dispatch | 最初の起点となるメソッド |
get_initial | このビューのフォームに使用する初期データを返します。 |
form_valid | フォームが有効な場合は、指定されたURLにリダイレクトします。 |
form_invalid | フォームが無効な場合は、無効なフォームをレンダリングします。 |
get_context_data | フォームをコンテキストdictに挿入します。 |
get | GET要求を処理する:空白のフォームをインスタンス化します。 |
post | POSTリクエストを処理する:渡されたPOST変数を使用してフォームインスタンスをインスタンス化し、それが有効かどうかを確認します。 |
get_queryset | DBのクエリーセットを実施できます。 |
使用例
簡単な使用例です。 View名:TestView、modelsにtestモデルを作成し、templateにtest.htmlをセットしてあると想定。
views.py
class TestView(ListView):
""" 一覧画面 """
model = test
template_name = 'test.html'
# 起点処理。画面を開いたときに、条件に合わない場合は、別画面にリダイレクトする例
def dispatch(self, request, *args, **kwargs):
#
if not 条件 :
return redirect('遷移先')
else:
return super().dispatch(request, *args, **kwargs)
# 画面を表示するときに使用するDBのクエリーをセットする例
def get_queryset(self):
return test.objects.filter(
test.user=self.request.user)
# フォームの初期値をセットする例。dispachで書き換えてもここで上書きされるため初期値はここでセットする。
def get_initial(self):
initial = super().get_initial()
initial['user'] = test.user #testモデルのuserを初期値としてセット
return initial
# フォームの入力が成功した場合 testオブジェクトの最新レコードのpkをセット
def form_valid(self, form):
form.instance.id = test.objects.latest('pk').pk
form.save()
return super().form_valid(form)
# テンプレート内で呼び出せる、コンテキストをセットする。
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['test_message'] = "テストメッセージです。"
return context