I want to change the JSON, which rest_framework or django returns when a validation error occures.
I will use one of my views as example, but I want to change error mess
if not serializer.is_valid(raise_exception=False)
return Response(serializer.errors.values(), status=status.HTTP_400_BAD_REQUEST)
The default structure of DRF when handling errors is something like this:
{"email": ["This field is required."]}
And you can change this structure to your need by writing a custom exception handler.
Now let's say you want to achieve the following structure:
{"errors": [{"field": "email", "message": "This field is required."}]}
Your custom exception handler could be something like this:
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
# Update the structure of the response data.
if response is not None:
customized_response = {}
customized_response['errors'] = []
for key, value in response.data.items():
error = {'field': key, 'message': value}
customized_response['errors'].append(error)
response.data = customized_response
return response
The easiest way to change the error style through all the view in your application is to always use serializer.is_valid(raise_exception=True)
, and then implement a custom exception handler that defines how the error response is created.