(最終更新月:2021年11月)
「データベースの既存データを削除するページが作りたい!」
「Pythonコードでデータを削除するにはどうするの?」
というお考え、疑問をお持ちのDjango初学者の方向けの記事となります
当記事を通じて、
- 特定のデータを削除するページを作成する方法
について解説していきます
- URLから「pk」を受け取る
- 特定のオブジェクトをget_object_or_404で取り出す
方法が既にご存知である前提で話を進めていきます
当記事はアプリ開発~公開までをご紹介しているシリーズの一記事になります
最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます
興味のある方は下記よりシリーズをまとめたページへお進みください

削除を確認するページの作成
データを削除する時には確認画面を一度挟むのが無難です
下記の機能を持ったページを作っていきます
- 削除して良いかを確認する
- 削除を実行する
シンプルですが、こんなページを作っていきます

【nippo-delete.html】
{% extends "base.html" %}
{% block content %}
<form method="post">{% csrf_token %}
<p>削除しますと復旧ができません。よろしいですか?</p>
<input type="submit" value="削除する">
</form>
{% endblock %}
【views.py】
まずはページを表示するための記述です
def nippoDeleteView(request, pk):
template_name = "nippo/nippo-delete.html"
obj = get_object_or_404(NippoModel, pk=pk)
ctx = {"object": obj}
return render(request, template_name, ctx)
【urls.py】
...
from .views import ..., nippoDeleteView
urlpatterns = [
...
path("delete/<int:pk>/", nippoDeleteView, name="nippo-delete"),
]
以上で表示までは完了です
次章にて、views関数で取得したデータを削除する記述を加えていきます
データを削除する「deleteメソッド」
データを削除するには、
データオブジェクト.delete()
を実行します
【コード例】
from django.shortcuts import render, get_object_or_404
def nippoDeleteView(request, pk):
template_name = "nippo/nippo-delete.html"
obj = get_object_or_404(NippoModel, pk=pk)
ctx = {"object": obj}
if request.POST:
obj.delete()
return render(request, template_name, ctx)
以上で削除の実行についての記述は完了です
実行してみましょう!
①リストページへアクセスします

4つのオブジェクトが保存されているのがわかります
②特定のデータを削除するページへ進みます

一番最後のデータを削除します
③「削除する」ボタンをクリック

クリックしても画面に変化はありませんが、、
④ページをリロードしてみます

404ページの表示、つまりページが存在しないと返ってきます
⑤再度リストページへアクセスすると、

最後のデータが削除されていることがわかります!
まとめ
Djangoフレームワークを使ってデータの削除ページを作るには、
- HTMLテンプレートで確認用のページを作成
- view関数でPOST送信の際にdeleteメソッドを実行
するよう記述しましょう
ただ、お気づきの通り削除は無事実行できましたが、実行後のページ移行に違和感がありました
次回はこの違和感を修正すべく、ページのリダイレクトについて解説をしていきます
当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
という方は必見です!
