【问题标题】:How to capture the Model.DoesNotExist exception in Django rest framework?如何在 Django rest 框架中捕获 Model.DoesNotExist 异常?
【发布时间】:2019-03-05 15:26:15
【问题描述】:

在 Django REST Framework 中,当您查询数据库模型并且它不存在时,将引发异常ModelName.DoesNotExist

此异常会根据型号名称而变化。

例如:

  • 查询Car 模型将引发Car.DoesNotExist
  • 查询Plane 模型将引发Plane.DoesNotExist

这会带来麻烦,因为您无法在一个共同的地方捕获异常,因为您不知道异常的父类。

每次查询不同的模型时都必须捕获不同的异常,例如:

try:
    return Car.objects.get(pk=1)
except Car.DoesNotExist:
    raise Http404

为什么要这样设计这个功能?

是否可以捕获一个常见的异常?

【问题讨论】:

    标签: django django-models django-rest-framework


    【解决方案1】:

    你可以使用ObjectDoesNotExist:

    from django.core.exceptions import ObjectDoesNotExist
    
    try:
        return Car.objects.get(pk=1)
    except ObjectDoesNotExist:
        raise Http404
    

    ObjectDoesNotExist 将捕获所有模型的 DoesNotExist 异常。

    Django 还提供了get_object_or_404() 快捷方式,因此您无需显式引发 Http404。

    【讨论】:

    • 谢谢,但为什么 django 已经有 ObjectDoesNotExist 时提供了详细的异常
    • @KramerLi Django 提供了一个 DoesNotExist 异常作为每个模型类的属性,以识别找不到的对象类,并允许您使用 try/except 捕获特定的模型类。跨度>
    • @KramerLi 来自文档的这一部分:docs.djangoproject.com/en/2.1/ref/models/instances/…
    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多