Django データの作成、削除、更新の実装
初めに
前回に続いて本棚アプリケーションの作成を行いました。今回はデータの作成、削除、更新の機能を実装しました。
これらに対して行った具体的な手順をまとめます。
nissin-geppox.hatenablog.com
概要
- データの作成
- データの削除
- データの更新
データの作成
初めに、管理画面からではなくウェブページ上からデータを作成できるようにしました。
まず、以下のようにurls.pyにコードを追加してルーティングの設定を行いました。また、次のviews.pyで使用するreverse_lazyで引数として利用するために、設定したpathそれぞれに"name = "を用いて名前を設定しました。
from django.urls import path from . import views urlpatterns = [ path('book/', views.ListBookView.as_view(), name='list-book'), path('book/<int:pk>/detail/', views.DetailBookView.as_view(),name='detail-book'), path('book/create/', views.CreateBookView.as_view(), name='create-book'), ]
続けて、以下のようにviews.pyにデータ作成用のclassを作成し、テーブルと項目を指定しました。加えて、最後の行では遷移先を設定しました。
from django.shortcuts import render from django.urls import reverse_lazy from django.views.generic import ListView, DetailView, CreateView from .models import Book class ListBookView(ListView): template_name = 'book/book_list.html' model = Book class DetailBookView(DetailView): template_name = 'book/book_detail.html' model = Book class CreateBookView(CreateView): template_name = 'book/book_create.html' model = Book fields = {'title', 'text', 'category'} success_url = reverse_lazy('list-book')
次に、データ作成画面のhtmlファイルbook_create.htmlを以下のように作成しました。
{% extends 'base.html' %} {% block title %}書籍作成{% endblock %} {% block content %} <form method='POST'>{% csrf_token %} {{form.as_p}} <input type='submit' value='作成する'> </form> {% endblock content %}
以下の画像は表示されたデータ作成画面の様子です。
上の画像より、データ作成画面が正常に表示されることを確認することができました。
また、以下の画像はこの画面で作成したデータが追加された後の一覧画面の様子です。
上の画像より、正常にデータが追加されていることを確認することができました。
データの削除
次に、作成したデータを削除できるようにしました。
まず、以下のようにurls.pyにコードを追加してルーティングの設定を行いました。
from django.urls import path from . import views urlpatterns = [ path('book/', views.ListBookView.as_view(), name='list-book'), path('book/<int:pk>/detail/', views.DetailBookView.as_view(),name='detail-book'), path('book/create/', views.CreateBookView.as_view(), name='create-book'), path('book/<int:pk>/delete/', views.DeleteBookView.as_view(), name='delete-book'), ]
続けて、以下のようにviews.pyにデータ削除用のclassを作成し、テーブルを指定しました。加えて、最後の行では遷移先を設定しました。
from django.shortcuts import render from django.urls import reverse_lazy from django.views.generic import ListView, DetailView, CreateView, DeleteView from .models import Book class ListBookView(ListView): template_name = 'book/book_list.html' model = Book class DetailBookView(DetailView): template_name = 'book/book_detail.html' model = Book class CreateBookView(CreateView): template_name = 'book/book_create.html' model = Book fields = {'title', 'text', 'category'} success_url = reverse_lazy('list-book') class DeleteBookView(DeleteView): template_name ='book/book_confirm_delete.html' model = Book success_url = reverse_lazy('list-book')
次に、データ削除画面のhtmlファイルbook_confirm_delete.htmlを以下のように作成しました。
{% extends 'base.html' %} {% block title %}書籍削除{% endblock %} {% block content %} <form method='post'> {% csrf_token %} <button type='submit'>{{ object.title }}を削除する</button> </form> {% endblock %}
以下の画像は表示されたデータ削除画面の様子です。
上の画像より、データ削除画面が正常に表示されることを確認することができました。
また、以下の画像はデータが削除された後の一覧画面の様子です。
上の画像より、正常にデータが削除されていることを確認することができました。
データの更新
次に、作成したデータを更新できるようにしました。
まず、以下のようにurls.pyにコードを追加してルーティングの設定を行いました。
from django.urls import path from . import views urlpatterns = [ path('book/', views.ListBookView.as_view(), name='list-book'), path('book/<int:pk>/detail/', views.DetailBookView.as_view(),name='detail-book'), path('book/create/', views.CreateBookView.as_view(), name='create-book'), path('book/<int:pk>/delete/', views.DeleteBookView.as_view(), name='delete-book'), path('book/<int:pk>/update/', views.UpdateBookView.as_view(), name='update-book'), ]
続けて、以下のようにviews.pyにデータ更新用のclassを作成し、テーブルと項目を指定しました。加えて、最後の行では遷移先を設定しました。
from django.shortcuts import render from django.urls import reverse_lazy from django.views.generic import ( ListView, DetailView, CreateView, DeleteView, UpdateView, ) from .models import Book class ListBookView(ListView): template_name = 'book/book_list.html' model = Book class DetailBookView(DetailView): template_name = 'book/book_detail.html' model = Book class CreateBookView(CreateView): template_name = 'book/book_create.html' model = Book fields = {'title', 'text', 'category'} success_url = reverse_lazy('list-book') class DeleteBookView(DeleteView): template_name ='book/book_confirm_delete.html' model = Book success_url = reverse_lazy('list-book') class UpdateBookView(UpdateView): model = Book fields = ('title', 'text', 'category') template_name = 'book/book_update.html' success_url = reverse_lazy('list-book')
次に、データ更新画面のhtmlファイルbook_update.htmlを以下のように作成しました。
{% extends 'base.html' %} {% block title %}書籍修正{% endblock %} {% block content %} <form method='POST'>{% csrf_token %} {{form.as_p}} <button type='submit'>修正する</button> </form> {% endblock %}
以下の画像は表示されたデータ更新画面の様子です。
上の画像より、データ更新画面が正常に表示されることを確認することができました。
また、データ更新の動作確認は次のブログにまとめています。
nissin-geppox.hatenablog.com