Комментарий не удаляется - PullRequest
0 голосов
/ 13 марта 2019

Я сделал модель комментария для блога, и я хотел дать пользователю способ удалить комментарий, поэтому я сделал для него функциональное представление, но оно не сработало, поэтому я решил использовать представление на основе классов, но обаиз мнений дают ту же ошибку.единственное, что происходит, это то, что URL получает ? после него, и страница просто обновляется как есть.Представления на основе функций и классов приведены ниже

на основе func

def comment_delete(request, pk):
    comment_to_delete=get_object_or_404(comment,pk=pk)
    if request.method=='POST':
        post_url=comment_to_delete.content_object.get_absolute_url()
        comment_to_delete.delete()
        messages.success(request, 'Your comment has been deleted')
        return HttpResponseRedirect(post_url)

    context={
        'comment':comment_to_delete
    }
    return render(request, 'blog/confirm_delete.html', context)

на основе классов

class DeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = comment
    success_url = '/'

    def test_func(self):
        comment= self.get_object()
        if self.request.user == comment.user:
            return True
        return False

html страницы подтверждения

{% extends 'blog/base.html' %}
{% block content %}



<form>
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >

</form>


{% endblock %}

models.py

class comment(models.Model):
    post=models.ForeignKey(Blog, on_delete=models.CASCADE)
    user=models.ForeignKey(User, on_delete=models.CASCADE)
    content=models.TextField(max_length=160)
    timestamp=models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{}-{}'.format(self.post.title,str(self.user.username))

    def get_absolute_url(self):
        return reverse('comment', kwargs={"pk": self.pk})

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вам необходимо добавить запрос в форму.Для отправки запросов требуется токены для защиты от подделок межсайтовых запросов .Обычно токен передается с каждым почтовым запросом.

<form method="POST">
    {% csrf_token %}
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >
</form>
0 голосов
/ 13 марта 2019

Проблема в вашем шаблоне, а не в ваших представлениях.Вам нужно добавить method="post" в форму, чтобы выполнить запрос POST, и добавить {% csrf_token %}, чтобы предотвратить ошибку CSRF.

<form method="post">
    {% csrf_token %}
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...