Django中使用Sweetify确认框删除对象无响应的问题排查
问题原因
你的代码逻辑完全误解了Sweetify的工作机制:
- Sweetify弹窗是前端交互组件,后端调用
sweetify.sweetalert只是向前端返回包含弹窗配置的响应,此时用户还未进行点击操作,sweetify_response.get('did_confirm')必然为空,直接进入else分支跳转列表页,根本没执行删除逻辑。 - 最初直接删除有效,是因为前端直接发送了DELETE请求,后端执行了父类的
delete方法;现在加弹窗后,后端返回弹窗但前端没有绑定「点击确认后重新发送删除请求」的逻辑,导致无后续动作。
解决方法
推荐采用「前端控制弹窗+后端处理删除请求」的方案,逻辑更清晰:
1. 修改前端模板,绑定弹窗与删除请求
假设你的删除按钮是通过模板渲染的,修改为如下逻辑:
<!-- 替换原有删除按钮 --> <button class="delete-btn" data-delete-url="{% url 'dashboard_user:order-delete' order.id %}">删除</button> <script> // 给所有删除按钮绑定点击事件 document.querySelectorAll('.delete-btn').forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); const deleteUrl = this.getAttribute('data-delete-url'); // 触发Sweetify确认弹窗 Swal.fire({ title: 'آیا مطمٔنید؟', text: "آیا واقعا میخواهید سفارش مورد نظر حذف شود؟", icon: 'warning', showCancelButton: true, confirmButtonText: 'حذف', cancelButtonText: 'انصراف', dangerMode: true, timer: 15000, focusConfirm: true }).then((result) => { // 用户确认后发送DELETE请求 if (result.isConfirmed) { fetch(deleteUrl, { method: 'DELETE', headers: { 'X-CSRFToken': '{{ csrf_token }}', // Django必须的CSRF令牌 'Content-Type': 'application/json' } }).then(response => { if (response.ok) { // 删除成功后跳转回订单列表 window.location.href = "{% url 'dashboard_user:order-list' %}"; } else { Swal.fire('خطا', 'حذف سفارش با شکست مواجه شد', 'error'); } }); } }); }); }); </script>
2. 简化后端DeleteView视图
去掉错误的弹窗判断逻辑,回归正常的删除处理:
class DeleteOrder(DeleteView): model = OrderDetail success_url = reverse_lazy('dashboard_user:order-list') def delete(self, request, *args, **kwargs): try: response = super().delete(request, *args, **kwargs) messages.success(request, 'سفارش مورد نظر با موفقیت حذف شد') return response except Exception as e: messages.error(request, str(e)) return redirect(self.success_url) # 注意:如果OrderDetail的get_absolute_url不是指向订单列表页,建议删除此方法,避免覆盖success_url # def get_success_url(self): # return self.object.get_absolute_url()
额外注意事项
- 确保前端已正确引入Sweetify的JS和CSS资源,否则弹窗无法正常渲染。
- 若保留
get_success_url方法,需确认其返回地址与业务需求一致,避免删除后跳转错误页面。
内容的提问来源于stack exchange,提问作者programm_n
相关产品推荐
相关产品推荐

