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

Django删除数据库对象后重定向至指定视图的技术问询

问题描述

我希望在从数据库中删除对象后重定向到指定视图,以下是处理删除操作的视图代码:

def client_delete(request):
    if request.method == 'GET':
        return _not_exist_page(request)
    else:
        client = Client.objects.get(id=request.POST['id'])
        client.delete()
        print('deleted')
        return redirect('clients:index')
        print('deleted2')

执行删除操作后,终端显示内容如下:

deleted
[03/Apr/2018 15:55:50] "POST /clients/delete/ HTTP/1.1" 302 0
[03/Apr/2018 15:55:50] "..."

请协助解决相关问题。

解决方案与分析

先给你说最直观的:你代码里的print('deleted2')永远不会执行,因为return redirect(...)一旦运行,函数就直接返回了,后面的代码根本走不到——这是Python函数的正常逻辑,不是bug哈。

再看你的删除逻辑,有几个可以优化的点,避免潜在问题:

  • 处理对象不存在的情况:用Client.objects.get()如果找不到对应ID的客户,会直接抛出DoesNotExist异常,导致服务器返回500错误。换成get_object_or_404会更友好,自动返回404页面:
    from django.shortcuts import get_object_or_404
    
    def client_delete(request):
        if request.method == 'GET':
            return _not_exist_page(request)
        else:
            # 用get_object_or_404替代直接get,避免异常
            client = get_object_or_404(Client, id=request.POST['id'])
            client.delete()
            print('deleted')
            return redirect('clients:index')
    
  • 安全获取POST参数:直接request.POST['id']如果前端没传这个参数,会抛出KeyError。建议用get()方法获取,同时做个判断:
    def client_delete(request):
        if request.method == 'GET':
            return _not_exist_page(request)
        else:
            client_id = request.POST.get('id')
            if not client_id:
                # 这里可以返回你自定义的不存在页面,或者给前端提示
                return _not_exist_page(request)
            client = get_object_or_404(Client, id=client_id)
            client.delete()
            print('deleted')
            return redirect('clients:index')
    

从终端日志的302状态码来看,重定向其实已经成功触发了!302就是告诉浏览器“去跳转到另一个页面”的状态码。如果你觉得页面没跳转,可以检查这几点:

  1. 确认clients:index这个URL名称在你的urls.py里正确定义了,对应了正确的视图和路径
  2. 前端的删除表单是不是真的把请求POST到了/clients/delete/这个地址
  3. 打开浏览器的开发者工具,看网络请求里是不是真的收到了302响应,并且跳转地址是对的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:16:33