前回の記事では、タスクを編集する方法について学びました。
前回の記事では、タスクを追加する方法について学びました。 [sitecard subtitle=関連記事 url=https://freemas.stepupkaraoke.com/python/django/making-todol[…]
今回は、追加したタスクの内容を削除する方法について解説します。
この記事を読んで取り組むことで、以下を習得することができます。
- DjangoクラスベースビューのDeleteViewの使い方
本記事でも、クラスベースビューを用いてタスクの削除処理をさっくりと実装していきます。
今回はかなり短いので、さっくりと実装、理解して次の記事へのモチベーションが高まれば幸いです。
DjangoでTODOリストを作ろう!その4:タスクを削除しよう
タスク削除用のurls.pyを作成する
今回もModelは更新しないので、urls.py→View→Templateの順で作成していきます。
djangotodo/urls.pyにタスク削除用のURLを設定しましょう。以下のように追記してください。
1 2 3 4 5 6 7 8 9 |
from django.urls import path from .views import TaskList, TaskCreate, TaskUpdate, TaskDelete urlpatterns = [ path('', TaskList.as_view(), name='task_list'), path('create/', TaskCreate.as_view(), name='task_create'), path('<int:pk>/edit/', TaskUpdate.as_view(), name='task_edit'), path('<int:pk>/delete/', TaskDelete.as_view(), name='task_delete'), #追加 ] |
URLはタスクの更新処理と非常に似ています。URLでデータのプライマリキーを渡すことで、データの削除処理を走らせています。
名前はtask_deleteとなっています。次に、Viewsにタスク削除処理を入れていきましょう。
タスク削除処理を、Djangoのviews.pyに追記する
続いてタスク削除処理をviews.pyに実装します。こちらも記述量は少なめです。
1 2 3 4 5 6 7 |
from django.views.generic import ListView,UpdateView,DeleteView -- 省略 -- class TaskDelete(DeleteView): model = Task success_url = reverse_lazy('task_list') |
TaskDeleteクラスを、クラスベースビューのDeleteViewを継承することで作成しています。
記載量はかなり少なく、データを削除するデータベースのテーブルをmodelで指定しています。
さらに削除処理が成功した場合に、どのページに遷移するかを記載しています。
この場合はリスト一覧画面で削除して、削除後に同じページに戻るようにしています。
たった2行書くだけで削除処理が実装できるのは、楽でいいですね。
タスク削除のためにテンプレートを変更する
最後にテンプレートを編集します。前回の記事で扱ったUpdateViewとは違い、DeleteViewには専用のページは不要です。
そのため今回は「task_list.html」を一部修正して削除機能を実装します。
1 2 3 4 5 6 7 |
-- 省略 -- <!-- 1.削除用form --> <form method="post" action="{% url 'task_delete' task.id %}" style="display:inline;"> <! -- 2.CSRFトークン --> {% csrf_token %} <button type="submit" class="btn btn-danger" onclick="return confirm('本当に削除してもよろしいですか?')">削除</button> </form> |
これまでは全く機能しない削除ボタンでしたが、その周りをformタグで囲んでいます。
action属性には削除用のURLを設定し、それにtask.idを渡しています。
task.idはリスト表示したタスクのidを数字で表示します。
それぞれのタスクのidは固有のものなので、対象となるデータのみが削除される形になります。
例えば16番目のデータを削除する場合、上記のactionの指定したURLは「djangotodo/16/delete」のようになります。
以前にタスク追加でも説明したセキュリティ対策用のタグですね。
ここではボタンを押すだけなのですが、formである以上は記載するようにしましょう。
タスクが削除できるか確認しよう!
さっくりと実装できたところで、環境にアクセスして削除ボタンを押してみましょう。
ここでは一番上の「タスク2」を削除してみます。
削除警告のアラートでOKボタンを押して、以下のようにタスクが削除されれば完璧です。
おわりに
削除処理に関してはどのプログラミングでもコード量は少なくなりがちです。
ですがDjangoのクラスベースビューを使用するとさらに少なくなるのが分かると思います。
クラスベースビューの強みがよく分かる内容でしたね。
さて前回と同じくここまでのソースはGithubに掲載しておくので、もしも見返したい場合は確認してみてください。
さて、次回は少し難易度を上げて、「タスクの完了」を扱っていきましょう。
前回の記事では、タスクの編集フォームを作成しました。 [sitecard subtitle=関連記事 url=https://freemas.stepupkaraoke.com/python/django/making-todolis[…]