From 770b912a8865b534c1198b80cac1dbf0e163b6b1 Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Tue, 14 Aug 2018 15:55:48 +0200 Subject: [PATCH] Avoid suppressing custom ValidationError Solution for a specific case, when detail of ValidationError is dictionary already. closes https://github.com/encode/django-rest-framework/issues/6124 --- rest_framework/serializers.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index fb4b8d393..9cda79c13 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -235,6 +235,8 @@ class BaseSerializer(Field): try: self._validated_data = self.run_validation(self.initial_data) except ValidationError as exc: + if isinstance(exc.detail, dict): + raise self._validated_data = {} self._errors = exc.detail else: @@ -489,6 +491,8 @@ class Serializer(BaseSerializer): if validate_method is not None: validated_value = validate_method(validated_value) except ValidationError as exc: + if isinstance(exc.detail, dict): + raise errors[field.field_name] = exc.detail except DjangoValidationError as exc: errors[field.field_name] = get_error_detail(exc) @@ -661,6 +665,8 @@ class ListSerializer(BaseSerializer): try: validated = self.child.run_validation(item) except ValidationError as exc: + if isinstance(exc.detail, dict): + raise errors.append(exc.detail) else: ret.append(validated) @@ -744,6 +750,8 @@ class ListSerializer(BaseSerializer): try: self._validated_data = self.run_validation(self.initial_data) except ValidationError as exc: + if isinstance(exc.detail, dict): + raise self._validated_data = [] self._errors = exc.detail else: