aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2014-11-13 20:24:48 +0000
committerTom Christie2014-11-13 20:24:48 +0000
commit78a741be27f5007d6fa2f73c6cedf04bfe638f9c (patch)
treef1ee8e2f4fdd8f7df5018f48fa5f1b2a197a3473 /rest_framework
parentfd97d9bff82b96b9362930686b9008ba78326115 (diff)
downloaddjango-rest-framework-78a741be27f5007d6fa2f73c6cedf04bfe638f9c.tar.bz2
Split out .create and .update on ListSerializer
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/serializers.py35
1 files changed, 24 insertions, 11 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index d83367f4..a4aeeeb7 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -449,26 +449,39 @@ class ListSerializer(BaseSerializer):
serializer=self
)
+ def update(self, instance, validated_data):
+ raise NotImplementedError(
+ "Serializers with many=True do not support multiple update by "
+ "default, only multiple create. For updates it is unclear how to "
+ "deal with insertions and deletions. If you need to support "
+ "multiple update, use a `ListSerializer` class and override "
+ "`.update()` so you can specify the behavior exactly."
+ )
+
+ def create(self, validated_data):
+ return [
+ self.child.create(attrs) for attrs in validated_data
+ ]
+
def save(self, **kwargs):
"""
Save and return a list of object instances.
"""
- assert self.instance is None, (
- "Serializers do not support multiple update by default, only "
- "multiple create. For updates it is unclear how to deal with "
- "insertions and deletions. If you need to support multiple update, "
- "use a `ListSerializer` class and override `.save()` so you can "
- "specify the behavior exactly."
- )
-
validated_data = [
dict(list(attrs.items()) + list(kwargs.items()))
for attrs in self.validated_data
]
- self.instance = [
- self.child.create(attrs) for attrs in validated_data
- ]
+ if self.instance is not None:
+ self.instance = self.update(self.instance, validated_data)
+ assert self.instance is not None, (
+ '`update()` did not return an object instance.'
+ )
+ else:
+ self.instance = self.create(validated_data)
+ assert self.instance is not None, (
+ '`create()` did not return an object instance.'
+ )
return self.instance