DjangoのDeleteViewでデータを削除する方法を実装例つきで解説
DjangoのDeleteViewとは?
DeleteViewは、Djangoに標準で組み込まれている汎用クラスビューの一つで、フロントエンド(画面)からモデルのデータを削除するために使います。管理サイト(admin)のように確認画面を挟んでレコードを削除できるため、少ないコード量で安全な削除機能を実装でき、実務のプロジェクトでも非常に役立ちます。
まず、Djangoプロジェクトとアプリを作成してください。この記事では、プロジェクト名を「tutorial11」、アプリ名を「modelFormsDemo」として進めます。
基本設定
最初に基本設定を行います。settings.py の INSTALLED_APPS に作成したアプリを追加しましょう。
INSTALLED_APPS = [
'modelFormsDemo',
]
続いて、プロジェクトの urls.py を以下のように編集し、アプリ側のURLを読み込みます。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('modelFormsDemo.urls')),
]
ここでアプリのURL設定を取り込んでいます。次に、アプリの urls.py を以下のように記述します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name="home"),
path('student/delete/<int:pk>/', views.StudentDeleteView.as_view(), name="delete"),
path('success/', views.success, name='success'),
]
ここでは3つのURLを定義しています。1つ目はトップページの表示、2つ目は削除処理用のDeleteView、3つ目は削除成功後のリダイレクト先です。
実装例
モデルの作成
models.py に以下のモデルを追加します。
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=100)
standard = models.CharField(max_length=100)
section = models.CharField(max_length=100)
ここではシンプルなStudent(生徒)モデルを作成しました。忘れずにマイグレーションを実行して、テーブルをデータベースへ反映しておきましょう。
フォームの作成
アプリディレクトリ直下に forms.py を新規作成し、以下を記述します。
from django import forms
from .models import Student
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ['name', 'standard', 'section']
homeビューで表示するためのシンプルなModelFormです。
ビューの作成
views.py に以下のコードを追加します。
from django.shortcuts import render
from .forms import StudentForm
from django.views.generic.edit import DeleteView
from .models import Student
from django.urls import reverse_lazy
# Create your views here.
def home(request):
if request.method == 'POST':
form = StudentForm(request.POST)
if form.is_valid():
form.save()
stuForm = StudentForm()
return render(request, 'home.html', {"stu_form": stuForm})
class StudentDeleteView(DeleteView):
model = Student
template_name = 'delete_view.html'
success_url = reverse_lazy("success")
homeビューではフロントエンドの描画を行い、StudentDeleteViewでは削除確認用の delete_view.html を表示します。success_urlには reverse_lazy を使い、削除完了後にリダイレクトされるページを指定しています。
テンプレートの作成
アプリディレクトリ内に templates フォルダを作成し、その中に home.html、delete_view.html、success.html の3つのファイルを配置します。
home.html
<!DOCTYPE html>
<html>
<head>
<title>TUT</title>
</head>
<body>
{% for fm in stu_form %}
<form method="post">
{%csrf_token%}
{{fm.errors}}<br>
{{fm.label}}:{{fm}}<br>
{%endfor%}
<button type="submit">送信</button>
</form>
</body>
</html>
delete_view.html
<!DOCTYPE html>
<html>
<head>
<title>TUT</title>
</head>
<body>
<form method="post">{% csrf_token %}
<p>「{{ object }}」を本当に削除しますか?</p>
<input type="submit" value="削除する">
</form>
</body>
</html>
success.html
<!DOCTYPE html> <html> <head> <title>TUT</title> </head> <body> <h2>削除が完了しました</h2> </body> </html>
これら3つはすべてHTMLテンプレートファイルです。home.htmlは生徒情報の登録用、delete_view.htmlは削除確認用、success.htmlは削除後のリダイレクト先として使用します。
動作確認
準備が整ったら、開発サーバーを起動して動作を確認してみましょう。
home.html

https://127.0.0.1:8000/student/delete/(対象オブジェクトのID)/ にアクセスすると、削除確認画面の delete_view.html が表示されます。
delete_view.html

「削除する」ボタンをクリックすると該当レコードが削除され、successページへリダイレクトされます。これでDeleteViewによる削除機能の実装は完了です。
-
DjangoモデルにJSONフィールドを追加する方法【django-jsonfield活用ガイド】
この記事では、DjangoのモデルにJSONフィールドを追加する方法を解説します。JSONはキーと値のペアでデータを保存できるシンプルなフォーマットで、波括弧({})で記述されます。開発者向けサイトなどでは、柔軟な構造のデータを扱う場面が多く、そうしたケースでJSONフィールドは非常に役立ちます。事前準備まず、Djangoプロジェクトとアプリを作成しましょう。アプリをINSTALLED_APPSに追加し、URLの設定を行い、基本的なモデルを作成してHTMLファイル上にフォームを表示できるようにしておいてください。django-jsonfieldパッケージのインストール以下のコマンドでdjang
-
Edgeブラウザのお気に入りをHTMLファイルでインポート・エクスポートする手順を解説
別のブラウザに乗り換える際、Edgeのお気に入り(ブックマーク)をそのまま引き継げると非常に便利です。実はMicrosoft Edgeには、お気に入りをHTMLファイルとしてインポート・エクスポートする機能が標準で搭載されています。この記事では、その具体的な操作方法をわかりやすく解説します。 Edgeのお気に入りをHTMLファイルにバックアップ・復元するメリット お気に入り(ブックマーク)とは、よく訪れるWebページをブラウザに保存し、ワンクリックですぐにアクセスできるようにする機能です。これを他のブラウザでも利用できるようにしておけば、時間と手間を大幅に節約できます。 Chromium版Mi