その5
記事に対して、コメントを出すところまでうまくいきました。
では、コメントをしたユーザーのみに、対象コメントの削除権を与えるにはどうしたらいいでしょう?
それではスタート。
views.py
blog/views.py
from django.shortcuts import render, redirect #redirect追加
(略)
def delete_comment(request, pk, comment_pk):
comment = Comment.objects.get(id=comment_pk)
post_id = pk
if request.user.id == comment.author.id or \
request.user.id == comment.post.author.id:
comment.delete()
return redirect('blog:article', pk=post_id)
同じページにリダイレクトするために、まずはredirectをインポートします。
pkは記事自体の番号、
comment_pkはコメントの番号です。
ifの中身は
削除リクエストのユーザーid == コメントの筆者(loginid) か、
削除リクエストのユーザーid == ポスト(記事)の筆者
なら削除可能としています。
urls.py
追加します。
blog/urls.py
path('article/<int:pk>/comment-delete/<int:comment_pk>/', views.delete_comment, name='delete_comment'),
article.html
コメント削除ボタンの表示条件もifをつけます。
article.html
{% if request.user.id == article.author.id or request.user.id == comment.author.id %}
<a href="{% url 'blog:delete_comment' article.id comment.id %}" class="btn btn-danger">コメント削除</a>
{% endif %}
挿入箇所はfor commentの中です。
確認
※記事自体は adminが作成
※コメントは admin と user1 が書き込んでいる状態