diff options
| author | Tymur Maryokhin | 2014-12-04 20:57:27 +0100 | 
|---|---|---|
| committer | Tymur Maryokhin | 2014-12-04 20:57:27 +0100 | 
| commit | 45dc44b2038f5533a472b015c45200b5d1ca6052 (patch) | |
| tree | 223395acd755b96955fce46da78e3f26b14745b6 | |
| parent | 001884a1927f6ceaa60dcc2a4df3422f94455311 (diff) | |
| parent | e8cbf41bd9066a21bf102bb60fbb42b4b15e05f6 (diff) | |
| download | django-rest-framework-45dc44b2038f5533a472b015c45200b5d1ca6052.tar.bz2 | |
Merge branch 'master' of github.com:tomchristie/django-rest-framework
| -rw-r--r-- | docs/tutorial/1-serialization.md | 16 | ||||
| -rw-r--r-- | rest_framework/renderers.py | 4 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 28 | 
3 files changed, 26 insertions, 22 deletions
| diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md index a3c19858..52c75d2c 100644 --- a/docs/tutorial/1-serialization.md +++ b/docs/tutorial/1-serialization.md @@ -110,21 +110,21 @@ The first thing we need to get started on our Web API is to provide a way of ser          style = serializers.ChoiceField(choices=STYLE_CHOICES,                                          default='friendly') -        def create(self, validated_attrs): +        def create(self, validated_data):              """              Create and return a new `Snippet` instance, given the validated data.              """ -            return Snippet.objects.create(**validated_attrs) +            return Snippet.objects.create(**validated_data) -        def update(self, instance, validated_attrs): +        def update(self, instance, validated_data):              """              Update and return an existing `Snippet` instance, given the validated data.              """ -            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) +            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()              return instance diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index ee34ffae..4ffd46e3 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -374,6 +374,10 @@ class HTMLFormRenderer(BaseRenderer):              'base_template': 'input.html',              'input_type': 'time'          }, +        serializers.FileField: { +            'base_template': 'input.html', +            'input_type': 'file' +        },          serializers.BooleanField: {              'base_template': 'checkbox.html'          }, diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index d417ca80..af8aeb48 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -608,20 +608,20 @@ class ModelSerializer(Serializer):      })      _related_class = PrimaryKeyRelatedField -    def create(self, validated_attrs): +    def create(self, validated_data):          """          We have a bit of extra checking around this in order to provide          descriptive messages when something goes wrong, but this method is          essentially just: -            return ExampleModel.objects.create(**validated_attrs) +            return ExampleModel.objects.create(**validated_data)          If there are many to many fields present on the instance then they          cannot be set until the model is instantiated, in which case the          implementation is like so: -            example_relationship = validated_attrs.pop('example_relationship') -            instance = ExampleModel.objects.create(**validated_attrs) +            example_relationship = validated_data.pop('example_relationship') +            instance = ExampleModel.objects.create(**validated_data)              instance.example_relationship = example_relationship              return instance @@ -633,8 +633,8 @@ class ModelSerializer(Serializer):          # If we don't do this explicitly they'd likely get a confusing          # error at the point of calling `Model.objects.create()`.          assert not any( -            isinstance(field, BaseSerializer) and not field.read_only -            for field in self.fields.values() +            isinstance(field, BaseSerializer) and (key in validated_attrs) +            for key, field in self.fields.items()          ), (              'The `.create()` method does not suport nested writable fields '              'by default. Write an explicit `.create()` method for serializer ' @@ -644,17 +644,17 @@ class ModelSerializer(Serializer):          ModelClass = self.Meta.model -        # Remove many-to-many relationships from validated_attrs. +        # Remove many-to-many relationships from validated_data.          # They are not valid arguments to the default `.create()` method,          # as they require that the instance has already been saved.          info = model_meta.get_field_info(ModelClass)          many_to_many = {}          for field_name, relation_info in info.relations.items(): -            if relation_info.to_many and (field_name in validated_attrs): -                many_to_many[field_name] = validated_attrs.pop(field_name) +            if relation_info.to_many and (field_name in validated_data): +                many_to_many[field_name] = validated_data.pop(field_name)          try: -            instance = ModelClass.objects.create(**validated_attrs) +            instance = ModelClass.objects.create(**validated_data)          except TypeError as exc:              msg = (                  'Got a `TypeError` when calling `%s.objects.create()`. ' @@ -679,10 +679,10 @@ class ModelSerializer(Serializer):          return instance -    def update(self, instance, validated_attrs): +    def update(self, instance, validated_data):          assert not any( -            isinstance(field, BaseSerializer) and not field.read_only -            for field in self.fields.values() +            isinstance(field, BaseSerializer) and (key in validated_attrs) +            for key, field in self.fields.items()          ), (              'The `.update()` method does not suport nested writable fields '              'by default. Write an explicit `.update()` method for serializer ' @@ -690,7 +690,7 @@ class ModelSerializer(Serializer):              (self.__class__.__module__, self.__class__.__name__)          ) -        for attr, value in validated_attrs.items(): +        for attr, value in validated_data.items():              setattr(instance, attr, value)          instance.save()          return instance | 
