前回の続きで、Djangoについて学んでいきます。
今回もモデルについて勉強していきます。
Djangoの勉強内容は以下の本を参考にしています。
参考
Python Django3超入門 (日本語) 単行本 – 2020/6/13 掌田 津耶乃 (著)
コードは以前の記事を参考にしてください。
Djangoを勉強してみる(入門編)
Djangoを勉強してみる(入門編その2)
Djangoを勉強してみる_urlを学ぶ(入門編)
Djangoを勉強してみる_テンプレートを学ぶ(入門編)
Djangoを勉強してみる_テンプレートを学ぶ_その2(入門編)
Djangoを勉強してみる_フォームを学ぶ_その1(入門編)
Djangoを勉強してみる_フォームを学ぶ_その2(入門編)
Djangoを勉強してみる_フォームを学ぶ_その3(入門編)
Djangoを勉強してみる_モデルを学ぶ_その1(入門編)
Djangoを勉強してみる_モデルを学ぶ_その2(入門編)
Djangoを勉強してみる_モデルを学ぶ_その3(入門編)
Djangoを勉強してみる_モデルを学ぶ_その4(入門編)
Djangoを勉強してみる_モデルを学ぶ_その5(入門編)
今回の目的
前回はCRUDのUpdate(更新)画面を作成しました。
今回は作成したデータを削除するDeleteについて勉強していこうと思います。
Deleteを作ってみる
削除するためには、次のような作業を行います。
・削除するデータを選択する
・削除画面に移動する
・データの削除確認する
・データを削除する
それではやっていきます。
まずは、削除のためのurlを作成します。
1.urls.pyを編集
ファイル:sample_app>hello>urls.py
コード:
from django.urls import path
from . import views
urlpatterns = [
path('',views.index, name='index'),
path('create/', views.create, name='create'),
path('edit/<int:num>',views.edit, name='edit'),
path('delete/<int:num>',views.delete, name='delete'), #追加
]
Updateの時と作り同じで、URLがdeleteになっただけです。
次にトップページに削除用のリンクを追加します。
2.index.htmlを編集
ファイル:sample_app>hello>templates>hello>index.html
コード:
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
<title>{{ title }}</title>
</head>
<body class = "container">
<h1>{{ title }}</h1>
<p>{{ msg|safe }}</p>
<a href="{% url 'create' %}" class="btn btn-primary">新規作成</a>
<table class="table">
<tr>
<th>ID</th>
<th>NAME</th>
<th>GENDER</th>
<th>MAIL</th>
<th>AGE</th>
<th>BIRTHDAY</th>
</tr>
{% for item in data %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>{% if item.gender == False %}male{% endif %}
{% if item.gender == True %}female{% endif %}</td>
<td>{{ item.mail }}</td>
<td>{{ item.age }}</td>
<td>{{ item.birthday }}</td>
<td><a href="{% url 'edit' item.id %}">編集</a></td>
<td><a href="{% url 'delete' item.id %}">削除</a></td> #追加
</tr>
{% endfor %}
</table>
</body>
</html>
こちらもUpdate同じでURLの宛先を変えています。
続いてdelete用のテンプレートを準備します。
3.delete.htmlを新規作成
ファイル:sample_app>hello>templates>hello>delete.html
コード:
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
<title>{{ title }}</title>
</head>
<body class = "container">
<h1>{{ title }}</h1>
<p>※以下のデータを削除します。</p>
<table class="table">
<tr><th>ID<td>{{ obj.id }}</td></th></tr>
<tr><th>Name<td>{{ obj.name }}</td></th></tr>
<tr><th>Gender<td>
{% if obj.gender == False %}male{% endif %}
{% if obj.gender == True %}femal{% endif %}</td></th></tr>
<tr><th>Email<td>{{ obj.mail }}</td></th></tr>
<tr><th>Age<td>{{ obj.age }}</td></th></tr>
<tr><th>Birthday<td>{{ obj.birthday }}</td></th></tr>
<form action="{% url 'delete' id %}" method=post>
{% csrf_token %}
<tr><th></th><td>
<input type="submit" value="削除" class="btn btn-primary">
</td></tr>
</form>
</table>
</body>
</html>
最後にdelete関数を作ります。
4.views.pyを編集
ファイル:sample_app>hello>views.py
コード:
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from .models import Friend
#from .forms import HelloForm
from .forms import FriendForm
def index(request):
data = Friend.objects.all()
params = {
'title': 'Hello World!!',
'msg': 'ALL Friends',
'data': data,
}
return render(request, 'hello/index.html', params)
#create-new
def create(request):
if (request.method == 'POST'):
obj = Friend()
friend = FriendForm(request.POST, instance=obj)
friend.save()
return redirect(to='/hello')
params = {
'title': '新規作成画面',
'form': FriendForm(),
}
return render(request, 'hello/create.html', params)
#Edit関数
def edit(request, num):
obj = Friend.objects.get(id=num)
if (request.method == "POST"):
friend = FriendForm(request.POST, instance=obj)
friend.save()
return redirect(to='/hello')
paramas = {
'title': '編集画面',
'id': num,
'form':FriendForm(instance=obj),
}
return render(request, 'hello/edit.html', paramas)
#以下を追加-----
#delete関数
def delete(request, num):
friend = Friend.objects.get(id=num)
if(request.method == 'POST'):
friend.delete()
return redirect(to='/hello')
params = {
'title': '削除画面',
'id': num,
'obj': friend,
}
return render(request, 'hello/delete.html', params)
以上で設定が終わったので、動作確認してみます。
動作確認
python manage.py runserver
ブラウザで以下にアクセスします。
http://localhost:8000/helloテーブルの一番右のカラムに「削除」リンクが追加されています。

ID3番のデータを削除してみます。削除リンクをクリックします。

削除画面遷移しました。削除ボタンを押します。

ちゃんとデータが削除されました。
今回の目的であるDeleteを作成することができました。
これで、CRUDの基本をすべて作成することができました。
次回はデータ検索する方法ついて勉強していこうと思います。
以上です。ありがとうございました。
P.S.
勉強を継続することが苦手ですか?
少し前からココナラというサービスで習慣化のテクニックについて教えるサービスを始めました。
もし、いつも3日坊主で終わってしまうという方や、ダイエットを続けたい、勉強したい、運動したいなど何か習慣化したいと思っている方がいましたら全力でサポートしますので、まずは覗いてみてください。
すでに何人かの方に実践してもらって効果が出ているという感想をいただいてます。

コメント