最新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
相关产品推荐
相关产品推荐

