1
0

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 5 years have passed since last update.

Django2.0でブログの作成(その5:コメントを削除)

Posted at

その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 が書き込んでいる状態

▼user1でログイン
記事の筆者ではないので、自分のコメントだけしか削除できない。
スクリーンショット 2018-10-09 14.46.12.png

▼adminでログイン
記事自体の筆者なので、全てに削除権が与えられる。
スクリーンショット 2018-10-09 14.47.57.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?