Skip to content

Commit a5f822d

Browse files
committed
Empty cases of .validated_data and .errors as lists not dicts for ListSerializer (#4180)
1 parent 04e5b5b commit a5f822d

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

rest_framework/serializers.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,28 @@ def save(self, **kwargs):
667667

668668
return self.instance
669669

670+
def is_valid(self, raise_exception=False):
671+
# This implementation is the same as the default,
672+
# except that we use lists, rather than dicts, as the empty case.
673+
assert hasattr(self, 'initial_data'), (
674+
'Cannot call `.is_valid()` as no `data=` keyword argument was '
675+
'passed when instantiating the serializer instance.'
676+
)
677+
678+
if not hasattr(self, '_validated_data'):
679+
try:
680+
self._validated_data = self.run_validation(self.initial_data)
681+
except ValidationError as exc:
682+
self._validated_data = []
683+
self._errors = exc.detail
684+
else:
685+
self._errors = []
686+
687+
if self._errors and raise_exception:
688+
raise ValidationError(self.errors)
689+
690+
return not bool(self._errors)
691+
670692
def __repr__(self):
671693
return unicode_to_repr(representation.list_repr(self, indent=1))
672694

tests/test_serializer_bulk_update.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def test_bulk_create_success(self):
4646
serializer = self.BookSerializer(data=data, many=True)
4747
self.assertEqual(serializer.is_valid(), True)
4848
self.assertEqual(serializer.validated_data, data)
49+
self.assertEqual(serializer.errors, [])
4950

5051
def test_bulk_create_errors(self):
5152
"""
@@ -76,6 +77,7 @@ def test_bulk_create_errors(self):
7677
serializer = self.BookSerializer(data=data, many=True)
7778
self.assertEqual(serializer.is_valid(), False)
7879
self.assertEqual(serializer.errors, expected_errors)
80+
self.assertEqual(serializer.validated_data, [])
7981

8082
def test_invalid_list_datatype(self):
8183
"""

0 commit comments

Comments
 (0)
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