スポンサードリンク



こんにちは。sinyです。

この記事では、DjangoのCreateViewを使ったデータ登録処理の完了時に、処理結果として登録したデータレコードを表示する方法を紹介します。

<参考デモ動画>

 

実装手順

models.py

以下のようなモデルを前提に説明していきます。

 

まず最初に、Kakeiboテーブルクラスに get_absolute_urlを追加して、Djangoのreverse()関数を通したURLを返すようにします。

 

reverseメソッドの引数にリダイレクト先のURLパターン「kakeibo:create_done」を指定し、「kwargs=」にリダイレクトしたい新規登録したレコードのpkキー、カテゴリ名(category)、金額(money)、メモ(memo)の値を指定しておきます。

イメージとしては、新規データ登録が完了したら、そのレコードの内容をURLパターン「kakeibo:create_done」に渡してあげるといった感じです。

urls.py

URLパターンの設定は以下のようにします。

 

データ登録が完了した際にCALLされるURLパターン「create_done」のURLパターンを'create_done/<int:pk>/<category>/<int:money>/<memo>/'のように指定します。

 

forms.py

ModelFormを使って登録画面用のフォームを定義します。

普通のフォーム定義なので特に難しい部分はないと思います。

 

views.py

データ登録用にDjango汎用ビューのCreateViewを承継して登録用のクラスを定義します。

利用するモデルにKakeibo、利用するフォームクラス名には先ほどforms.pyで定義したKakeiboFormを指定します。

 

ここまでは普通のCreateViewの定義です。

続いて以下のcreate_done関数を追加します。
これは、データ登録処理が完了した際に呼び出される関数で、最終的にデータ登録完了画面(create_done.html)が呼び出されます。

 

create_done関数の第1引数でrequestを受け取り、第2引数は「**kwargs」と指定することでmodels.pyのget_absolute_urlで指定した辞書データkwargsを受け取ります。

以下の部分で、**kwargsに格納されている新規登録されたレコードの値を1つずつ取り出して辞書型変数contentsに格納していきます。

 

最後に、以下の通りreturn renderにcontentsを指定することでテンプレート側に登録されたレコード情報を渡してあげます。

 

テンプレート

最後に、テンプレート側で辞書型データcontentsを受け取り、値を表示してあげます。

 

create_done.htmlの全コードは以下の通りです。

 

以上で設定は完了です。

新規データ登録処理が完了すると、以下のように登録されたレコードが表示できるようになります。

もっとスマートなやり方がありそうなのですが、こんなやり方もあるというくらいで参考にしていただければ幸いです。

 

おすすめの記事