From 1128fe3bafef3555895a050db112bcedb50f9805 Mon Sep 17 00:00:00 2001 From: Sebastien Beal Date: Sat, 29 Dec 2012 12:01:55 +0900 Subject: [PATCH] multiple object updates introducing a _instance attribute to the Serializer --- rest_framework/serializers.py | 10 ++++++++-- rest_framework/tests/serializer.py | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 970227331..d7bb47fd5 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -118,6 +118,7 @@ class BaseSerializer(Field): self._data = None self._files = None self._errors = None + self._instance = instance ##### # Methods to determine which fields to use when (de)serializing objects. @@ -276,7 +277,12 @@ class BaseSerializer(Field): """ if hasattr(data, '__iter__') and not isinstance(data, dict): # TODO: error data when deserializing lists - return [self.from_native(item, files) for item in data] + objects = [] + for i, item in enumerate(data): + if hasattr(self.object, '__iter__'): + self._instance = self.object[i] + objects.append(self.from_native(item, files)) + return objects self._errors = {} if data is not None or files is not None: @@ -286,7 +292,7 @@ class BaseSerializer(Field): self._errors['non_field_errors'] = ['No input provided'] if not self._errors: - return self.restore_object(attrs, instance=getattr(self, 'object', None)) + return self.restore_object(attrs, instance=getattr(self, '_instance', None)) def field_to_native(self, obj, field_name): """ diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 05d976400..1b9da2dcb 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -877,3 +877,12 @@ class MultipleObjectsTests(TestCase): self.assertEquals(serializer.object, expected) self.assertFalse(serializer.object is expected) self.assertEquals(serializer.data, self.expected) + + def test_update(self): + serializer = CommentSerializer(instance=self.comments, data=self.data) + expected = self.comments + self.assertEquals(serializer.is_valid(), True) + self.assertEquals(serializer.object, expected) + for obj, exp in zip(serializer.object, expected): + self.assertTrue(obj is exp) + self.assertEquals(serializer.data, self.expected)