diff options
| author | Tom Christie | 2014-10-03 13:42:06 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-10-03 13:42:06 +0100 | 
| commit | 3a3e2bf57d5443dc0b058d5beb3111f87c418947 (patch) | |
| tree | 48dfb01c88307bc01d6b1350826505708bb30fb8 | |
| parent | e6c5ebdda6d0f169f21498909e2d390c460138a9 (diff) | |
| download | django-rest-framework-3a3e2bf57d5443dc0b058d5beb3111f87c418947.tar.bz2 | |
Serializer.save() takes keyword arguments, not 'extras' argument
| -rw-r--r-- | docs/topics/3.0-announcement.md | 21 | ||||
| -rw-r--r-- | rest_framework/mixins.py | 4 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 7 | 
3 files changed, 15 insertions, 17 deletions
diff --git a/docs/topics/3.0-announcement.md b/docs/topics/3.0-announcement.md index fcae79e1..4a781503 100644 --- a/docs/topics/3.0-announcement.md +++ b/docs/topics/3.0-announcement.md @@ -109,16 +109,16 @@ The following example from the tutorial previously used `restore_object()` to ha  This would now be split out into two separate methods. -    def update(self, instance, validated_attrs) -        instance.title = validated_attrs.get('title', instance.title) -        instance.code = validated_attrs.get('code', instance.code) -        instance.linenos = validated_attrs.get('linenos', instance.linenos) -        instance.language = validated_attrs.get('language', instance.language) -        instance.style = validated_attrs.get('style', instance.style) +    def update(self, instance, validated_data) +        instance.title = validated_data.get('title', instance.title) +        instance.code = validated_data.get('code', instance.code) +        instance.linenos = validated_data.get('linenos', instance.linenos) +        instance.language = validated_data.get('language', instance.language) +        instance.style = validated_data.get('style', instance.style)          instance.save() -	def create(self, validated_attrs): -        return Snippet.objects.create(**validated_attrs) +	def create(self, validated_data): +        return Snippet.objects.create(**validated_data)  Note that the `.create` method should return the newly created object instance. @@ -134,15 +134,14 @@ For example the following code *is no longer valid*:          serializer.object.user = request.user  # Include the user when saving.          serializer.save() -Instead of using `.object` to inspect a partially constructed instance, you would now use `.validated_data` to inspect the cleaned incoming values. Also you can't set extra attributes on the instance directly, but instead pass them to the `.save()` method using the `extras` keyword argument. +Instead of using `.object` to inspect a partially constructed instance, you would now use `.validated_data` to inspect the cleaned incoming values. Also you can't set extra attributes on the instance directly, but instead pass them to the `.save()` method as keyword arguments.  The corresponding code would now look like this:      if serializer.is_valid():          name = serializer.validated_data['name']  # Inspect validated field data.          logging.info('Creating ticket "%s"' % name) -        extras = {'user': request.user}  # Include the user when saving. -        serializer.save(extras=extras) +        serializer.save(user=request.user)  # Include the user when saving.  #### Limitations of ModelSerializer validation. diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index de334b4b..bc4ce22f 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -101,8 +101,8 @@ class AllowPUTAsCreateMixin(object):          if instance is None:              lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field              lookup_value = self.kwargs[lookup_url_kwarg] -            extras = {self.lookup_field: lookup_value} -            serializer.save(extras=extras) +            extra_kwargs = {self.lookup_field: lookup_value} +            serializer.save(**extra_kwargs)              return Response(serializer.data, status=status.HTTP_201_CREATED)          serializer.save() diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index c3a0815e..ed024f87 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -74,12 +74,12 @@ class BaseSerializer(Field):      def create(self, validated_data):          raise NotImplementedError('`create()` must be implemented.') -    def save(self, extras=None): +    def save(self, **kwargs):          validated_data = self.validated_data -        if extras is not None: +        if kwargs:              validated_data = dict(                  list(validated_data.items()) + -                list(extras.items()) +                list(kwargs.items())              )          if self.instance is not None: @@ -256,7 +256,6 @@ class Serializer(BaseSerializer):                  for field_name, field in self.fields.items()                  if field.get_value(self._initial_data) is not empty              ], serializer=self) -            #return self.to_representation(self._initial_data)          return ReturnDict([              (field.field_name, field.get_initial())  | 
