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