使用外键on_delete=models.PROTECT的Django REST框架

u4dcyp6a  于 2022-12-14  发布在  Go
关注(0)|答案(3)|浏览(127)

当我尝试使用on_delete=models.PROTECT选项删除另一个模型中的ForeignKey Django模型对象时,返回的错误是正常的Django 500 Exception HTML网页,如何让Django rest框架返回带有错误的json响应,DRF是否有默认的方法或者应该自定义?

0yg35tkg

0yg35tkg1#

引发500异常是预期行为。您必须进行自定义以具有自定义错误。您可以参考此similar question

xmakbtuz

xmakbtuz2#

您可以使用ProtectedError预期捕获错误。

from django.db.models import ProtectedError

try:
    # Write here your code
except ProtectedError:
    # Return your customer validation error
omvjsjqw

omvjsjqw3#

要完成MSI Shafik应答,特别是对于django-rest-framework,您可以重写destroy方法来捕获异常,并在响应中返回保护对象,以处理应用程序中的错误消息。

例如:

from django.db.models.deletion import ProtectedError

    def destroy(self, request, *args, **kwargs):
        try:
            return super().destroy(request, *args, **kwargs)
        except ProtectedError as protected_error:
            protected_elements = [
                {"id": protected_object.pk, "label": str(protected_object)}
                for protected_object in protected_error.protected_objects
            ]
            response_data = {"protected_elements": protected_elements}
            return Response(data=response_data, status=status.HTTP_400_BAD_REQUEST)

相关问题