为什么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
相关产品推荐
相关产品推荐

