0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Django初心者]DjangoでTodoリストを作成する⑤(省略Ver)

Last updated at Posted at 2021-02-15

今回は「[Django初心者]DjangoでTodoリストを作成する」の第5回として、Todoの削除機能を追加していこうと思います。

前回は、編集画面の表示をしました。

まだそこまでやれていない人はぜひ前回までをみてください!

[Djnago初心者]DjnagoでTodoリストを作成する① (省略Ver)

[Django初心者]DjangoでTodoリストを作成する②(省略Ver)

[Djnago初心者]DjnagoでTodoリストを作成する③ (省略Ver)

[Django初心者]DjangoでTodoリストを作成する④(省略Ver)

また、この記事は手順の確認のため解説を省いています。
細かい説明しているバージョンもあるので、初学者のかたは下記を見てください。

[Django初心者]DjangoでTodoリストを作成する⑤

GitHubはこちらです。

https://github.com/cardene777

GitHubの使い方がわからない方はこちらを参考にしてください!

GitHubは難しくないよ!

それでは早速やっていきましょう!

構成の確認

まずは前回までの構成の確認からしていきましょう。

├── config
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── templates
│   └── base.html
└── todo
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── __init__.py
    ├── models.py
    ├── static
    │   └── todo
    │       └── css
    │           └── list.css
    ├── templates
    │   └── todo
    │       ├── detail.html
    │       ├── list.html
    │       └── update.html
    ├── tests.py
    ├── urls.py
    └── views.py

urls.pyに追記

次にように追記してください。

urls.py
from django.urls import path
from .views import TodoList, TodoDetail, TodoUpdate, TodoDelete

urlpatterns = [
    path('list/', TodoList.as_view(), name='list'),
    path('detail/<int:pk>/', TodoDetail.as_view(), name='detail'),
    path('update/<int:pk>/', TodoUpdate.as_view(), name='update'),
    path('delete/<int:pk>/', TodoDelete.as_view(), name='delete'),   # ここ
]

vies.pyに追記

次のように追記してください。

view.py
from django.views import generic
from .models import TodoModel
from django.urls import reverse_lazy


class TodoList(generic.ListView):
    template_name = 'todo/list.html'
    model = TodoModel


class TodoDetail(generic.DetailView):
    template_name = 'todo/detail.html'
    model = TodoModel


class TodoUpdate(generic.UpdateView):
    template_name = 'todo/update.html'
    model = TodoModel
    fields = ('title', 'content', 'deadline')
    
# ここから
class TodoDelete(generic.DeleteView):
    template_name = 'todo/delete.html'
    model = TodoModel

    success_url = reverse_lazy('list')

delete.htmlの編集

ターミナルで次のようなコマンドを実行してください。

touch todo/templates/todo/delete.html 

再度構成を確認します。

├── config
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── templates
│   └── base.html
└── todo
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── __init__.py
    ├── models.py
    ├── static
    │   └── todo
    │       └── css
    │           └── list.css
    ├── templates
    │   └── todo
    │       ├── delete.html
    │       ├── detail.html
    │       ├── list.html
    │       └── update.html
    ├── tests.py
    ├── urls.py
    └── views.py

delete.htmlを次のように編集してください。

update.html
{% extends 'base.html' %}

{% block content %}
    <div class="jumbotron jumbotron-fluid">
      <div class="container">
        <h1 class="display-4">削除フォーム</h1>
        <p class="lead">やることを削除しましょう</p>
      </div>
    </div>
    <div class="container">
        <form action="" method="POST">
        {% csrf_token %}
        <h1>{{ object.title }}</h1>
        <p>{{ object.content }}</p>
        <p>{{ object.deadline }}</p>
        <p>本当に削除しますか?</p>
        <input type="submit" value="削除">
    </form>
    </div>
    <div class="container">
        <p class="btn-content"><a href="{% url 'list' %}" class="btn btn-info" tabindex="-1" role="button" aria-disabled="true">一覧に戻る</a></p>
    </div>
{% endblock content %}

list.htmlに追記

次のように追記してください。

list.html
{% extends 'base.html' %}
{% load static %}

{% block header %}
<link rel="stylesheet" href="{% static 'todo/css/list.css' %}">
{% endblock header %}

{% block content %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
        <h1 class="display-4">TodoList</h1>
        <p class="lead">やることを記入しましょう</p>
    </div>
</div>
<div class="container ">
    {% for list in object_list %}
        <div class="one_box">
            <h1>{{ list.title }}</h1>
            <h4>{{ list.deadline }}</h4>
            <div class="btns">
                <p class="btn-content"><a href="{% url 'detail' list.pk %}" class="btn btn-primary "tabindex="-1" role="button" aria-disabled="true">詳細</a></p>
                <p class="btn-content"><a href="{% url 'update' list.pk %}" class="btn btn-info" tabindex="-1" role="button" aria-disabled="true">編集</a></p>
                <!--ここの間-->
                <p class="btn-content"><a href="{% url 'delete' list.pk %}" class="btn btn-danger" tabindex="-1" role="button" aria-disabled="true">削除</a></p>    
                <!--ここの間-->
            </div>
        </div>
    <hr>
    {% endfor %}
</div>
{% endblock content %}

詳細画面の表示

それでは早速削除画面を表示させてみましょう。

こちらにアクセスしてください。
http://127.0.0.1:8000/list/

どのTodoでも良いので「削除」というボタンをクリックしてください。

登録していた情報がしっかり表示されていますね。

それでは「削除」というボタンを押してください。

そうすると一覧表示画面が表示され、先ほど削除したデータが表示から消えていると思います。

これで削除画面の作成とデータ野削除の実行は完了です!

お疲れ様でした!

最後に

今回は「DjnagoでTodoリストを作成する」の第5回として、Todoの削除画面を作成して、todoの削除をするところまでやってきました。

続き...

[Django初心者]DjangoでTodoリストを作成する⑥(省略Ver)

質問などがあればコメントするか、TwitterのDMまで送ってください!

それでは!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?