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

最新Django版本用户上传文件删除问题:点击Delete按钮无响应

问题排查与修复

我没收到任何错误提示,但点击模板里的Delete按钮完全没反应,以下是代码里的缺失问题和修复方案:

核心问题点

  • 模板没加表单和CSRF令牌:单独的submit按钮没法发送合法的POST请求,必须用<form>包裹,还要加Django要求的CSRF令牌。
  • 自定义delete_roll方法多余且错误:Django的DeleteView已经自带删除逻辑,不需要额外写这个静态方法,而且这个方法的参数定义也错了(静态方法不能接self)。
  • 没指定删除成功后的跳转地址:DeleteView需要知道删完后跳去哪,得设置success_url或者在模型里加get_absolute_url。
  • 多余的form_class设置:DeleteView默认用确认表单,指定RollForm会干扰默认逻辑。

修复后的代码

1. views.py

from django.views.generic.edit import DeleteView
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Roll

class DeleteRollView(LoginRequiredMixin, DeleteView):
    model = Roll
    template_name = 'users/delete_roll.html'
    # 指定删除成功后跳转的页面
    success_url = reverse_lazy('users:list_roll')

2. delete_roll.html

<form method="post">
    {% csrf_token %}
    <p>确定要删除这条记录吗?</p>
    <input type="submit" value="Delete"/>
</form>

3. models.py(现有逻辑保留,优化下文件判断)

from django.db import models

class Roll(models.Model):
    csv = models.FileField(default="", upload_to='home/')

    def delete(self, *args, **kwargs):
        # 先删关联的文件,避免残留
        if self.csv:
            self.csv.delete()
        super().delete(*args, **kwargs)

4. 额外检查:URL配置

确保URL正确指向视图,示例:

from django.urls import path
from .views import DeleteRollView

app_name = 'users'

urlpatterns = [
    # 其他URL...
    path('roll/delete/<int:pk>/', DeleteRollView.as_view(), name='delete_roll'),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:07