【Django】deleteメソッドで削除ページの作成|実例付

Django

(最終更新月:2021年11月)

✔当記事はこのような方に向けて書かれています

「データベースの既存データを削除するページが作りたい!」

「Pythonコードでデータを削除するにはどうするの?」

✔当記事を通じてお伝えすること

  • 特定のデータを削除するページを作成する方法

当記事を理解するには、以下を既に理解いただいている必要があります。

  1. URLから「pk」を受け取る
  2. 特定のオブジェクトをget_object_or_404で取り出す

わからない方はこちらのチュートリアルで対象の記事をお探しください。

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔YouTube解説動画

当記事の内容は動画を見ながら進めると、約15分程度で完了します。

動画ならではの情報も解説しているので、記事と一緒にご覧ください。

動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。

削除を確認するページの作成

削除機能は以下のような機能を持っています。

  1. 削除して良いかを確認する
  2. 削除を実行する

間違えて消してしまうのを避けたいからです。

シンプルですが、こんなページを作っていきます。

HTMLテンプレート:nippo-delete.html

{% extends "base.html" %}

{% block content %}
<form method="post">{% csrf_token %}
    <p>削除しますと復旧ができません。よろしいですか?</p>
    <input type="submit" value="削除する">
</form>
{% endblock %}

views.py:nippoDeleteView

まずはページを表示するための記述です

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()

コード例:nippoDeleteView

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)

機能の確認

✔リストページへアクセス

オブジェクトが保存されているのを確認します。

http://localhost:8000/nippo/

✔特定のデータを削除するページへ進む

一番最後のデータを削除してみましょう。

http://localhost:8000/nippo/delete/5/

✔「削除する」ボタンで実行

http://localhost:8000/nippo/delete/5/

✔ページをリロード

http://localhost:8000/nippo/delete/5/

404ページが表示され、ページが存在しないことがわかります。

✔再度リストページへアクセスする

http://localhost:8000/nippo/

最後のデータが削除されていることがわかります!

まとめ:Djangoのdeleteメソッドは覚えればとても簡単

Djangoフレームワークを使ってデータの削除ページを作るには、以下のように記述します。

  1. HTMLテンプレートで確認用のページを作成
  2. view関数でPOST送信の際にdeleteメソッドを実行

しかし削除は無事実行できましたが、実行後のページ移行に違和感があります。

ページが削除されてもそのままとどまってしまうことです。

次回はこの違和感を修正すべく、ページのリダイレクトについて解説をしていきます。

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました