From 237ef2baaaa4ef24cabd2092384a2feb09f1422e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 21 Oct 2016 15:20:09 +0100 Subject: [PATCH] Fix for case of ListSerializer with single item --- rest_framework/serializers.py | 4 ++-- tests/test_serializer.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 098c3cd239..39987cd07f 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -507,7 +507,7 @@ def data(self): @property def errors(self): ret = super(Serializer, self).errors - if isinstance(ret, list) and len(ret) == 1 and ret[0].code == 'null': + if isinstance(ret, list) and len(ret) == 1 and getattr(ret[0], 'code', None) == 'null': # Edge case. Provide a more descriptive error than # "this field may not be null", when no data is passed. detail = ErrorDetail('No data provided', code='null') @@ -705,7 +705,7 @@ def data(self): @property def errors(self): ret = super(ListSerializer, self).errors - if isinstance(ret, list) and len(ret) == 1 and ret[0].code == 'null': + if isinstance(ret, list) and len(ret) == 1 and getattr(ret[0], 'code', None) == 'null': # Edge case. Provide a more descriptive error than # "this field may not be null", when no data is passed. detail = ErrorDetail('No data provided', code='null') diff --git a/tests/test_serializer.py b/tests/test_serializer.py index a2817f6a43..32be39faae 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -357,3 +357,16 @@ def test_validation_success(self): assert serializer.is_valid() assert serializer.validated_data == {'name': '2'} assert serializer.errors == {} + + +class Test4606Regression: + def setup(self): + class ExampleSerializer(serializers.Serializer): + name = serializers.CharField(required=True) + choices = serializers.CharField(required=True) + self.Serializer = ExampleSerializer + + def test_4606_regression(self): + serializer = self.Serializer(data=[{"name": "liz"}], many=True) + with pytest.raises(serializers.ValidationError): + serializer.is_valid(raise_exception=True) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy