LoginSignup
0
1

django 更新ページを更新してその詳細ページへ飛ばす方法。updateViewの記述。

Last updated at Posted at 2023-09-01

概要

djangoを使ったブログ投稿アプリ制作で躓いたため記事を作りました。

解決したかったこと

任意の詳細ページから更新ページへ飛んで、更新ボタンを押したらまた詳細ページへ飛ぶ仕様を実現したかった

よくある記事

任意の詳細ページから更新ページへ飛んで、更新ボタンを押したら一覧ページに飛ぶ仕様。この問題を解決するためのサイトはたくさんあるが、中々上記の解決方法が乗っているサイトがなかったため記載します。

前提情報

  • 任意の詳細ページはdetail.html
  • それに紐づく更新ページはupdate.htmlと仮定
  • detail.html内にある「更新」ボタンを押すと、update.htmlを表示
  • update.html内にある「更新」ボタンを押すと情報が更新されたdetail.htmlが表示されるようにする
  • アプリの階層は
フォルダ階層(簡易版).
├── aaaフォルダ
    ├──blogフォルダ(今回のアプリケーション名)
        ├──urls.py ※今回記述箇所
        ├──views.py ※今回記述箇所
        ├──models.py 
    ├── confフォルダ
    └── templatesフォルダ

実装方法

name='blog_detail'と記述しています

urls.py
urlpatterns = [
    ````
    path('detail/<int:pk>', views.BlogDetail.as_view(), name='blog_detail'),
    path('update/<int:pk>', views.BlogUpdate.as_view(), name='blog_update'),
    ````
]

def get_success_url(self):~~を追加します。
print文はpkの値をコンソールにて確認したいため記述しています。
print文はなくてもOK
reverse_lazyを利用して処理を完了した後に詳細ページに飛ばします。

('blog:blog_detail', kwargs={'pk': self.object.pk})の部分が重要で
('アプリケーション名:urls.pyで設定したname',id)となります。
これが
~blog/blog_detail/1 のURLなります。

views.py
~
~
~
from django.urls import reverse_lazy      ※この行を追加


urlpatterns = [
    ````
    class BlogUpdate(generic.UpdateView):
    model = Post
    form_class = BlogUpdateForm
    template_name = 'blog/blog_update.html'

    ※↓ここ重要!!!!!!!
    def get_success_url(self):
        print(self.object.pk)
        print('こんにちは')
        return reverse_lazy('blog:blog_detail', kwargs={'pk': self.object.pk})
    ````
]

※参考

update.htmlではinputタグを用いてデータを送信しています。
そのためViews.pyのUpdateViewにて処理が終わったらページに遷移するコードを書かなければならないのです。

update.html
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" id="save" value="更新">
</form>
0
1
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
0
1