为什么我的 else 语句在 django rest 框架中不起作用?

Why is my else statement not working in django rest framework?

我有以下代码:

views.py

@api_view(['DELETE'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def selected_job_delete(request,pk=None):
    if pk != None:
        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 = {}
        if operation:
            data["Success"] = "Successfully deleted"
        else:
            data["Failure"] = "Unsuccessful"
        return Response(data)

urls.py

path('api/jobs/<int:pk>/delete', views.selected_job_delete),

假设我在 Job 中的数据库有 只有 跟随 ID 40。我想删除它,所以我键入 api/jobs/40/delete 的 url 并且删除将会发生,然后是函数中的任务。我邮递员的输出结果将显示为 successfully deleted 。但是如果我键入 api/jobs/41/delete 的 url,41 的 id 在我的数据库中不存在,它不会 运行 我的 else 语句显示 unsuccessful .

而是显示给我

我怎样才能让它显示 unsuccessful 而不是显示它不存在的整个错误?

也许你可以这样做:

try:
    job.delete()
except:
    data["Failure"] = "Unsuccessful"
    return Response(data)

更新

try:
   job=Job.objects.get(pk=pk)
except: Job.DoesNotExist:
   data["Failure"] = "Unsuccessful"
   return data

你必须捕获异常 Job.DoesNotExist:

@api_view(['DELETE'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def selected_job_delete(request, pk=None):
    if pk != None:
        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()
       
            if operation:
               return Response({"Success": "Successfully deleted"})
        except Job.DoesNotExist:
            pass

        return Response({"Failure": "Unsuccessful"})