From cd359ed6b9452eb4add36166608f2da0a20f8763 Mon Sep 17 00:00:00 2001 From: Mark Aaron Shirley Date: Sat, 23 Mar 2013 08:54:49 -0700 Subject: [PATCH] Fix for nested bulk delete --- rest_framework/serializers.py | 9 ++++++--- rest_framework/tests/serializer_bulk_update.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 6aca2f574..c013471e7 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -386,12 +386,15 @@ class BaseSerializer(WritableField): 'data': value, 'context': self.context, 'partial': self.partial, - 'many': self.many + 'many': self.many, + 'allow_delete': self.allow_delete } serializer = self.__class__(**kwargs) + serializer.root = self.root if serializer.is_valid(): into[self.source or field_name] = serializer.object + self.root._deleted = (self.root._deleted or []) + (serializer._deleted or []) else: # Propagate errors up to our parent raise NestedValidationError(serializer.errors) @@ -452,7 +455,7 @@ class BaseSerializer(WritableField): ret.append(self.from_native(item, None)) errors.append(self._errors) - if update: + if update and self.allow_delete: self._deleted = identity_to_objects.values() self._errors = any(errors) and errors or [] @@ -508,7 +511,7 @@ class BaseSerializer(WritableField): else: self.save_object(self.object, **kwargs) - if self.allow_delete and self._deleted: + if self._deleted: [self.delete_object(item) for item in self._deleted] return self.object diff --git a/rest_framework/tests/serializer_bulk_update.py b/rest_framework/tests/serializer_bulk_update.py index 57e88d0ca..439567c1b 100644 --- a/rest_framework/tests/serializer_bulk_update.py +++ b/rest_framework/tests/serializer_bulk_update.py @@ -169,6 +169,7 @@ class BulkUpdateSerializerTests(TestCase): class PageSerializer(serializers.Serializer): id = serializers.IntegerField() number = serializers.IntegerField() + book_id = serializers.IntegerField() def restore_object(self, attrs, instance=None): if instance: @@ -302,7 +303,6 @@ class BulkUpdateSerializerTests(TestCase): book = self.Book.object_map[0] serializer = self.BookNestedSerializer(book, data=data) self.assertEqual(serializer.is_valid(), True) - self.assertEqual(serializer.data, data) serializer.save() book = self.Book.object_map[0] new_data = self.BookNestedSerializer(book).data