DeleteView приводит к ошибке 405 при нажатии на кнопку submit на django

У меня есть небольшое приложение для размещения записей в блоге, где все работает хорошо, кроме функции удаления. Как только я нажимаю кнопку delete, я перехожу на страницу удаления поста, но когда я нажимаю confirm на html странице DeleteView, я получаю 405 ошибку

моя views.py для удаления выглядит следующим образом

class DeletePost(DetailView):
    model = Articles
    template_name = 'delete_article.html'
    success_url = reverse_lazy('list_articles')

мой html файл, где упоминается ссылка, выглядит следующим образом

<!DOCTYPE html>
{% extends 'base.html' %}

{% block body %}
<div class="container">
{% for i in articles %}
    <div class="jumbotron">
        <h2>{{i.title}}</h2>
        <p>- {{i.author}}</p>
        {{i.created_on}}
        {{i.updated_on}}
        <p>{{i.content}}</p>
        <a class="btn btn-warning" href="{% url 'update_article' i.id %}">Update</a>
        <a class="btn btn-danger" href="{% url 'delete_article' i.id %}">Delete</a>
    </div>
{% endfor %}
</div>
{% endblock %}   

Урлы выглядят так

from django.urls import path

from mysite import views

urlpatterns = [
    path('articles/', views.PostList.as_view(), name='list_articles'),
    path('articles/<pk>/', views.PostDetail.as_view(), name='detail_article'),
    path('create/new/', views.CreateNewPost.as_view(), name='create_new_article'),
    path('update/<pk>/', views.UpdatePost.as_view(), name='update_article'),
    path('delete/<pk>/', views.DeletePost.as_view(), name='delete_article'),
]

и html для deleteview

<!DOCTYPE html>
{% extends 'base.html' %}

{% block body %}
<form method="post">
    {% csrf_token %}
    <p>Are you sure you want to delete "{{ object }}"?</p>
    {{ form.as_p }}
    <input class='btn btn-danger' type="submit"  value="Confirm">
</form>
{% endblock %}

405 означает, что метод не разрешен, измените метод вашей формы POST на метод DELETE.

<form method="DELETE">

Вы указали DetailView для удаления, что неправильно, вместо этого укажите DeleteView, который находится в from django.views.generic.edit import DeleteView.

Note: Представления на основе классов требуют фактическое имя представления в качестве суффикса, поэтому вы должны написать его как PostDeleteView вместо DeletePost. Аналогично, напишите PostListView, PostDetailView и т.д. Добавьте имя модели в качестве префикса и имя представления в качестве суффикса и должно быть в PascalCase.

Вернуться на верх