続いて,コメントの削除機能を実装しよう.まず,views.py に CommentDeleteView を追加する.
comments/views.py (抜粋)
from django.urls import reverse_lazy
from django.views.generic import ListView
from django.views.generic import DetailView
from django.views.generic import CreateView
from django.views.generic import UpdateView
from django.views.generic import DeleteView
from .forms import CommentForm
from .models import Comment
# Create your views here.
... (中略) ...
class UpdateCommentView(UpdateView):
model = Comment
form_class = CommentForm
success_url = reverse_lazy('comments:index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = 'コメントの更新'
context['form_name'] = 'コメントの更新'
context['button_label'] = 'コメントを更新する'
return context
class DeleteCommentView(DeleteView):
model = Comment
success_url = reverse_lazy('comments:index')
次に,ルートを記述する.
comments/urls.py
from django.urls import path
from . import views
app_name = 'comments'
urlpatterns = [
path('', views.CommentIndexView.as_view(), name='index'),
path('<int:pk>/', views.ShowCommentView.as_view(), name='show'),
path('create/', views.CreateCommentView.as_view(), name='create'),
path('<int:pk>/update/', views.UpdateCommentView.as_view(), name='update'),
path('<int:pk>/delete/', views.DeleteCommentView.as_view(), name='delete'),
]
comment_confirm_delete.html を作成する.このとき,モデル名_confirm_delete.html
が標準の名前になることに注意する.
comments/templates/comments/comment_confirm_delete.html
{% extends "base.html" %}
{% block title %}
コメント削除
{% endblock %}
{% block content %}
<div class="container">
<h1 class="my-5">コメントを削除しますか</h1>
<form method="POST">
{% csrf_token %}
<button type="submit" class="btn btn-primary">削除する</button>
</form>
</div>
{% endblock content %}
最後に,詳細表示画面に削除ページへのリンクを設置する.
comments/templates/comments/comment_detail.html (抜粋)
{% block content %}
<div class="container">
... (中略) ...
<hr>
<div>
<p>
<a href="{% url 'comments:update' comment.id %}">
[ 編集 ]
</a>
<a href="{% url 'comments:delete' comment.id %}">
[ 削除 ]
</a>
</p>
</div>
</div>
{% endblock content %}
実際に投稿したコメントを削除してみよう.詳細画面から[削除]をクリックするとよい.
[削除する]ボタンを押すと実際にコメントが削除される.