Fix for nested bulk delete

This commit is contained in:
Mark Aaron Shirley 2013-03-23 08:54:49 -07:00
parent cbccb406f4
commit cd359ed6b9
2 changed files with 7 additions and 4 deletions

View File

@ -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

View File

@ -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