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

为什么Django REST Framework中我的else语句无法正常运行?

问题根因

Django ORM的get()方法查询不到匹配记录时,会直接抛出对应模型的DoesNotExist异常,中断后续代码执行,不会走到你写的失败判断分支。除此之外,当前代码也没有兼容Job_detail、Job_track对应记录不存在的场景,同样会触发同类报错。

修复后的代码

views.py

@api_view(['DELETE'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def selected_job_delete(request,pk=None):
    if pk is None:
        return Response({"Failure": "缺少必要参数pk"})
    try:
        job=Job.objects.get(pk=pk)
        jobdetail = Job_detail.objects.get(job=pk)
        jobtrack = Job_track.objects.get(job = pk)
       
        jr = Job_removed()
        jdr = Job_detail_removed()
        jtr = Job_track_removed()

        jr.jobname = job.jobname    
        jr.owner = job.owner    
        jr.enabled = job.enabled    
        jr.start_date = job.start_date    
        jr.start_time = job.start_time    
        jr.date_added = job.date_added    
        jr.version = job.version
        jr.save()

        jdr.job = jr
        jdr.json = jobdetail.json
        jdr.save()

        jtr.job=jr
        jtr.jobdetail= jdr
        jtr.save()

        operation = job.delete()
        
        data = {}
        # Django delete方法返回(删除行数, 各类型删除计数)的元组,判断行数大于0即为删除成功
        if operation[0] > 0:
            data["Success"] = "Successfully deleted"
        else:
            data["Failure"] = "Unsuccessful"
        return Response(data)
    except (Job.DoesNotExist, Job_detail.DoesNotExist, Job_track.DoesNotExist):
        # 任意关联记录不存在都返回失败提示
        return Response({"Failure": "目标记录不存在,删除失败"})

urls.py无需修改。

逻辑说明
  • 新增try-except块捕获所有查询操作可能抛出的记录不存在异常,触发后直接返回友好失败提示
  • 修正了删除结果判断逻辑:Django的delete()方法返回的是二元组,直接判断元组是否存在永远为真,改为判断返回的删除行数更严谨
  • 新增了pk为空的参数校验逻辑,避免参数异常报错

内容的提问来源于stack exchange,提问作者L.Calvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:15:07