You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中DeleteView点击确认提交时返回405错误问题求助

问题根因

返回405错误的核心原因是删除视图的基类写错了:

  • 你定义的DeletePost继承了DetailView,这个类是专门用来处理GET请求展示对象详情的,本身不支持处理POST请求,所以你在确认页提交POST表单时,服务器会拒绝请求返回405状态码。
  • 你能正常打开删除确认页,只是因为GET请求下DetailView刚好能根据传入的pk查到对应文章对象、渲染模板,看起来和正常的确认页没有区别,但它完全没有执行删除操作的逻辑。
  • 另外你确认页模板里的{{ form.as_p }}是多余的,Django内置的DeleteView不需要渲染表单字段。
修复方案

1. 修正views.py中的删除视图

首先导入Django内置的通用删除视图DeleteView,将DeletePost的父类从DetailView改为DeleteView即可,修正后代码:

# 顶部补充导入DeleteView
from django.views.generic import DeleteView
from django.urls import reverse_lazy
from .models import Articles

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

2. 精简删除确认页模板

去掉模板中多余的{{ form.as_p }}代码,修正后的模板内容:

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

{% block body %}
<form method="post">
    {% csrf_token %}
    <p>确定要删除文章“{{ object }}”吗?</p>
    <input class='btn btn-danger' type="submit" value="确认删除">
</form>
{% endblock %}

改完之后重启服务,再点击确认按钮就能正常删除文章,跳转到文章列表页了。


内容的提问来源于stack exchange,提问作者ar d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:09:21