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

Django DeleteView如何传递参数用于构造success_url?

问题根因与修正方案

1. get_success_url 参数获取与传参逻辑错误

你在调用reverse_lazy时犯了两个错误:

  • 不能直接通过self.company/self.worker取关联值,self是视图类实例,要先获取当前待删除的Part对象(即self.object),再通过该对象取关联的外键值
  • 传字典形式的命名参数时应该用kwargs参数,不是args(args用于传位置参数列表)
    修正后的视图代码:
class PartDeleteView(DeleteView):
    model = Part

    def get_success_url(self):
        # self.object 就是当前要删除的Part实例
        return reverse_lazy('listparts', kwargs={
            'company_pk': self.object.company.pk,
            'worker_pk': self.object.worker.pk
        })

2. 表单未指定提交方法导致删除逻辑不触发

你的删除确认页表单没有加method="post",浏览器默认会用GET请求提交,而Django的DeleteView仅会处理POST请求的删除逻辑,GET请求仅会渲染确认页,所以出现跳转但不删除的问题。
修正后的表单代码:

<div class="row">
    <div class="col-md-3">
      <!-- 增加method="post" 指定提交方式 -->
      <form class="form-group" method="post">
        {% csrf_token %}{{ form|crispy }}
          <div class="form-group">
            <p>Are you sure you want to delete "{{ object }}"?</p>
            <!-- 按钮文本可根据需求调整,不影响功能 -->
            <input type="submit" class="btn btn-primary mt-2 mb-2" value="删除">
        </div>
      </form>
    </div>
</div>

可选优化:列表页跳转链接参数修正

你当前列表页的删除链接写法如果上下文没有单独定义part_pk变量,需要改成取Part实例的pk:

<a href="{% url 'deletepart' part.pk %}">Delete this part</a>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:48:04