#django #api #exception #django-rest-framework #django-views
Вопрос:
Я написал логику для удаления элемента в окне просмотра Django. Логика состоит в том, чтобы назначить этот элемент переменной и с помощью Try и Except. Это прекрасно работает, когда есть объект, но когда объекта нет, я получил сообщение об ошибке «leads.models.Lead.Не существует: запрос на соответствие лиду не существует».
Я должен был бы получить сообщение о том, что Сделка не существует со статусом 400, как у меня было внутри, за исключением. Я получаю 500 ошибок в посте.
def delete(self, request,pk, *args, **kwargs):
id = pk
lead = Lead.objects.get(id=id)
# abc.delete()
# return Response({"message": "Lead has been deleted"},
# status=status.HTTP_200_OK)
try:
lead = Lead.objects.get(id=id)
if lead.delete():
return Response({
"message": "Deals has been deleted"
},status=status.HTTP_204_NO_CONTENT)
except lead.DoesNotExist:
return Response({
"message": "Deal doesnt exist"
},status=status.HTTP_400_BAD_REQUEST)
Мои URL-адреса являются:
path('lead/<int:pk>', ChunksLeadCreate.as_view()),
Я надеюсь, что этого кода достаточно, чтобы устранить проблему.
Комментарии:
1. Я попытался, как вы сказали, но все равно получил ту же ошибку 500 в почтальоне.
2. У вас есть еще
lead = Lead.objects.get(id=id)
один вызов, который находится за пределами блока попыток. Это может привести к 5003. Только что проверил это, я тоже был не прав. Вы также можете использовать
lead.DoesNotExist
(из экземпляра), но это будет работать только в том случае, если вам удастся получить объект и в итоге получитьlead
объект, поэтому все равно лучше использовать его из класса модели (Lead.DoesNotExist
)4. да, это создавало проблему, я понял. Но почему задание снаружи может привести к ошибкам?? запутался….??
5. Потому что, если идентификатор, который вы используете, не существует, а вызов get() находится за пределами попытки, то django по умолчанию поднимет 500.
Ответ №1:
Я прокомментировал назначение свинца перед свинцом.Не существует, и это сработало.
def delete(self, request,pk, *args, **kwargs):
id = pk
# lead = Lead.objects.get(id=id)
# abc.delete()
# return Response({"message": "Lead has been deleted"},
# status=status.HTTP_200_OK)
try:
lead = Lead.objects.get(id=id)
if lead.delete():
return Response({
"message": "Deals has been deleted"
},status=status.HTTP_204_NO_CONTENT)
except Lead.DoesNotExist:
return Response({
"message": "Deal doesnt exist"
},status=status.HTTP_400_BAD_REQUEST)