スポンサーリンク

【Django】クラスベースビューで更新画面を作成【ブログアプリ2】

スポンサーリンク
スポンサーリンク
この記事は約5分で読めます。

 

クラスベースビューでの更新画面の作成について

前回はクラスベースビューを使ってブログ記事の詳細画面を作成した。

今回はクラスベースビューを使って更新画面を作成する。

 

前回:【Django】クラスベースビューで詳細画面を作成【ブログアプリ2】

 

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

 

 

クラスベースビューでの更新画面を作成する手順

 

urls.pyの編集

~デスクトップ/Blog2/app/urls.py

 

[1]BlogUpdateViewのインポート

views.pyからBlogUpdateViewをインポート。

BlogUpdateViewは未作成なので、次の手順で作成する。

 

[2]新しいURLパターンの追加

利用者からのリクエストURLが以下と一致した場合に実行されるPath関数を追加した。

http://127.0.0.1:8000/app/update/1

 

 

views.pyの編集

~デスクトップ/Blog2/app/views.py

 

[1]UpdateViewクラスのインポート

UpdateViewクラスはDjangoのクラスベースの汎用ビュー。

UpdateViewクラスは更新を行うことに特化している。

 

[2]UpdateFormクラスのインポート

forms.pyからUpdateFormをインポート。

UpdateFormはBlogモデルで定義したフィールド(title, content)のフォームを自動で作成できる。

 

[3]BlogUpdateViewクラスの作成

BlogUpdateViewはUpdateViewクラスを継承している。

変数modelにBlogモデルを格納

変数form_classにUpdatFormを格納し、Blogモデルから自動作成したフォーム情報を持たせる。

template_nameには更新用画面の情報を持つupdate.html

#success_url = reverse_lazy(‘blog:list’)
更新が完了したら一覧画面画面にリダイレクトする。
今回は更新後の詳細画面にリダイレクトしたいので、コメントアウトしている。
def get_success_url(self):
    return reverse_lazy(‘blog:detail’, kwargs={‘pk’: self.object.pk})
更新が完了したら内容が更新された後の詳細画面にリダイレクトする。
この場合はget_success_urlメソッドを使う。
‘blog:detail’はurls.pyで定義したアプリケーション名(app_name)がblogの、detailと名付けられたpath関数を呼び出している。
辞書kwargsにpkというキーで自身のオブジェクト(ブログ記事)のpk(つまりID)を格納して渡している。これにより今回更新したブログ記事を指定して再度詳細画面を開くことができる。

 

 

forms.pyの編集

~デスクトップ/Blog2/app/forms.py

[1]UpdateFormの作成

ModelFormを継承したUpdateFormクラスを作成。

Metaクラス内で変数modelにBlogモデルを格納し、

fieldsにはBlogモデルのフィールド(title, content)をリスト形式で保存する。

 

 

update.htmlの作成

~デスクトップ/Blog2/template/update.html

 

create.htmlとほぼ同じのため割愛。

 

 

ディレクトリ構成の確認

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

urls.pyでは新しいURLパターンを作成した。

利用者からのリクエストのURLが以下と一致した場合に実行されるPath関数を追記している。

http://127.0.0.1:8000/app/update/1

 

views.pyでは汎用ビュークラスのUpdateViewを継承したBlogUpdateViewを作成した。

 

update.htmlではviews.pyのBlogUpdateViewから受け取ったブログ記事の情報を表示している。

 

Django記事一覧

前回:【Django】クラスベースビューで詳細画面を作成【ブログアプリ2】

次回:【Django】クラスベースビューで削除機能を作成【ブログアプリ2】

 

Django記事一覧

コメント