Попытка удалить комментарий из сообщения в django

В настоящее время я пытаюсь удалить комментарий из моей базы данных через кнопку в шаблоне django. Модель выглядит следующим образом

from django.db import models
from django.contrib.auth.models import User
from cloudinary.models import CloudinaryField
from profiles.models import UserProfile


class Post(models.Model):
    user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, related_name='user_posts')
    title = models.CharField(max_length=220, unique=True)
    location = models.CharField(max_length=220)
    rating = models.DecimalField(
        max_digits=6, decimal_places=2)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="activity_post")
    updated_on = models.DateTimeField(auto_now=True)
    description = models.TextField()
    featured_image = CloudinaryField('image', blank=False)
    created_on = models.DateTimeField(auto_now_add=True)
    likes = models.ManyToManyField(User, related_name='activity_likes', blank=True)
    like_count = models.BigIntegerField(default='0')

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

    def number_of_likes(self):
        return self.likes.count()

    def liked_by_user(self):
        return self.likes.values_list('id', flat=True)


class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name="user_comment")
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    name = models.CharField(max_length=80)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ['created_on']

    def __str__(self):
        return f"Comment {self.body} by {self.name}"

Функция удаления

def delete_comment(request, post_id):
    users_comment = get_object_or_404(Comment, post=post_id)
    users_comment.delete()

    return redirect(reverse('activity'))

from . import views
from django.urls import path

urlpatterns = [
    path('like/', views.like, name='like'),
    path("add/", views.add_post, name="add_post"),
    path('edit/<int:post_id>/', views.edit_post, name='edit_post'),
    path('delete/<int:post_id>/', views.delete_post, name='delete_post'),
    path('edit_comment/<int:id>/', views.edit_comment, name='edit_comment'),
    path('delete_comment/<int:post_id>/', views.delete_comment, name='delete_comment'),
    path("activity/", views.PostList.as_view(), name="activity"),
    path('comment/<int:post_id>/', views.Comment.as_view(), name='comment'),
    path('searched_posts/', views.search_posts, name='searched_posts'),
    path('post/<int:post_id>/', views.post_detail, name='post_detail')
]

вот часть комментария, которая показывает кнопку.

{%if comments %}
{% for comment in comments %}
{% if comment.user == request.user %}
{{comment.body}} :comment
{{comment.id}} id
<a class="btn tbn-success" href="{% url 'edit_comment' comment.id %}" aria-label="edit button">Edit</a>
<button class="btn btn-warning"><a href="{% url 'delete_comment' comment.id %}">Delete</a></button>
{% endif %}

{% endfor%}
{% endif%}

Когда я нажимаю удалить, я получаю ошибку Ошибка

Любая помощь будет очень признательна, я пробовал тонну различных способов из интернета, но ничего не работает. может ли кто-нибудь направить меня в правильном направлении

Первое, что я вижу, это то, что ваша функция удаления использует post = post_id.

Каждый комментарий к определенному посту будет иметь общий внешний ключ этого поста, поэтому если к посту имеется более одного комментария, вы не сможете использовать функцию get_or_404() - она возвращает только один элемент.

URL, который вы создаете для своей кнопки, использует comment.id, поэтому имеет смысл использовать его вместо этого - так будет проще понять, что происходит.

urls.py

 path('delete_comment/<int:comment_id>/', views.delete_comment, name='delete_comment'),

views.py

def delete_comment(request, comment_id):
    users_comment = get_object_or_404(Comment, pk=comment_id)
    users_comment.delete()

    return redirect(reverse('activity'))
Вернуться на верх