LoginSignup
3
4

More than 5 years have passed since last update.

DJANGO CRUDのVIEWで呼び出し可能なメソッドの整理

Last updated at Posted at 2018-12-05

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

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4