diff options
| author | Tom Christie | 2014-11-13 20:24:48 +0000 | 
|---|---|---|
| committer | Tom Christie | 2014-11-13 20:24:48 +0000 | 
| commit | 78a741be27f5007d6fa2f73c6cedf04bfe638f9c (patch) | |
| tree | f1ee8e2f4fdd8f7df5018f48fa5f1b2a197a3473 /rest_framework | |
| parent | fd97d9bff82b96b9362930686b9008ba78326115 (diff) | |
| download | django-rest-framework-78a741be27f5007d6fa2f73c6cedf04bfe638f9c.tar.bz2 | |
Split out .create and .update on ListSerializer
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 35 | 
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 | 
