mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-23 15:54:16 +03:00
NON_FIELD_ERRORS_KEY setting
This commit is contained in:
parent
0d354e8f92
commit
6db3356c4d
|
@ -198,7 +198,9 @@ class Serializer(BaseSerializer):
|
||||||
Dict of native values <- Dict of primitive datatypes.
|
Dict of native values <- Dict of primitive datatypes.
|
||||||
"""
|
"""
|
||||||
if not isinstance(data, dict):
|
if not isinstance(data, dict):
|
||||||
raise ValidationError({'non_field_errors': ['Invalid data']})
|
raise ValidationError({
|
||||||
|
api_settings.NON_FIELD_ERRORS_KEY: ['Invalid data']
|
||||||
|
})
|
||||||
|
|
||||||
ret = {}
|
ret = {}
|
||||||
errors = {}
|
errors = {}
|
||||||
|
@ -224,7 +226,9 @@ class Serializer(BaseSerializer):
|
||||||
try:
|
try:
|
||||||
return self.validate(ret)
|
return self.validate(ret)
|
||||||
except ValidationError as exc:
|
except ValidationError as exc:
|
||||||
raise ValidationError({'non_field_errors': exc.messages})
|
raise ValidationError({
|
||||||
|
api_settings.NON_FIELD_ERRORS_KEY: exc.messages
|
||||||
|
})
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -77,6 +77,7 @@ DEFAULTS = {
|
||||||
|
|
||||||
# Exception handling
|
# Exception handling
|
||||||
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
|
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
|
||||||
|
'NON_FIELD_ERRORS_KEY': 'non_field_errors',
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
'TEST_REQUEST_RENDERER_CLASSES': (
|
'TEST_REQUEST_RENDERER_CLASSES': (
|
||||||
|
|
|
@ -3,7 +3,7 @@ Provides an APIView class that is the base of all views in REST framework.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied, ValidationError
|
from django.core.exceptions import PermissionDenied, ValidationError, NON_FIELD_ERRORS
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.datastructures import SortedDict
|
from django.utils.datastructures import SortedDict
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
@ -69,6 +69,12 @@ def exception_handler(exc):
|
||||||
headers=headers)
|
headers=headers)
|
||||||
|
|
||||||
elif isinstance(exc, ValidationError):
|
elif isinstance(exc, ValidationError):
|
||||||
|
# ValidationErrors may include the non-field key named '__all__'.
|
||||||
|
# When returning a response we map this to a key name that can be
|
||||||
|
# modified in settings.
|
||||||
|
if NON_FIELD_ERRORS in exc.message_dict:
|
||||||
|
errors = exc.message_dict.pop(NON_FIELD_ERRORS)
|
||||||
|
exc.message_dict[api_settings.NON_FIELD_ERRORS_KEY] = errors
|
||||||
return Response(exc.message_dict,
|
return Response(exc.message_dict,
|
||||||
status=status.HTTP_400_BAD_REQUEST)
|
status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user