当我尝试使用on_delete=models.PROTECT选项删除另一个模型中的ForeignKey Django模型对象时,返回的错误是正常的Django 500 Exception HTML网页,如何让Django rest框架返回带有错误的json响应,DRF是否有默认的方法或者应该自定义?
0yg35tkg1#
引发500异常是预期行为。您必须进行自定义以具有自定义错误。您可以参考此similar question
xmakbtuz2#
您可以使用ProtectedError预期捕获错误。
from django.db.models import ProtectedError try: # Write here your code except ProtectedError: # Return your customer validation error
omvjsjqw3#
要完成MSI Shafik应答,特别是对于django-rest-framework,您可以重写destroy方法来捕获异常,并在响应中返回保护对象,以处理应用程序中的错误消息。
MSI Shafik
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)
3条答案
按热度按时间0yg35tkg1#
引发500异常是预期行为。您必须进行自定义以具有自定义错误。您可以参考此similar question
xmakbtuz2#
您可以使用ProtectedError预期捕获错误。
omvjsjqw3#
要完成
MSI Shafik
应答,特别是对于django-rest-framework,您可以重写destroy
方法来捕获异常,并在响应中返回保护对象,以处理应用程序中的错误消息。例如: