Почему мой оператор else не работает в 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. Я хочу удалить ее, поэтому я ввожу ключ url api/jobs/40/delete и произойдет удаление, а затем задание в функции. Результат вывода в моем postman покажет, что это successfully deleted. Но если я ввожу url api/jobs/41/delete, id 41 не существует в моей базе данных, он не запускает оператор else, чтобы показать unsuccessful .

Вместо этого он показывает мне

enter image description here

Как сделать так, чтобы вместо целого куска ошибки показывалось unsuccessful, что он не существует?

Можно сделать так:

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

update

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"})
Вернуться на верх