Skip to content

Commit b86978c

Browse files
committed
Merge branch 'master' of github.com:tomchristie/django-rest-framework
2 parents 9621948 + f221b73 commit b86978c

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

docs/tutorial/1-serialization.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,21 @@ The first thing we need to get started on our Web API is to provide a way of ser
110110
style = serializers.ChoiceField(choices=STYLE_CHOICES,
111111
default='friendly')
112112

113-
def create(self, validated_attrs):
113+
def create(self, validated_data):
114114
"""
115115
Create and return a new `Snippet` instance, given the validated data.
116116
"""
117-
return Snippet.objects.create(**validated_attrs)
117+
return Snippet.objects.create(**validated_data)
118118

119-
def update(self, instance, validated_attrs):
119+
def update(self, instance, validated_data):
120120
"""
121121
Update and return an existing `Snippet` instance, given the validated data.
122122
"""
123-
instance.title = validated_attrs.get('title', instance.title)
124-
instance.code = validated_attrs.get('code', instance.code)
125-
instance.linenos = validated_attrs.get('linenos', instance.linenos)
126-
instance.language = validated_attrs.get('language', instance.language)
127-
instance.style = validated_attrs.get('style', instance.style)
123+
instance.title = validated_data.get('title', instance.title)
124+
instance.code = validated_data.get('code', instance.code)
125+
instance.linenos = validated_data.get('linenos', instance.linenos)
126+
instance.language = validated_data.get('language', instance.language)
127+
instance.style = validated_data.get('style', instance.style)
128128
instance.save()
129129
return instance
130130

rest_framework/serializers.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -608,20 +608,20 @@ class ModelSerializer(Serializer):
608608
})
609609
_related_class = PrimaryKeyRelatedField
610610

611-
def create(self, validated_attrs):
611+
def create(self, validated_data):
612612
"""
613613
We have a bit of extra checking around this in order to provide
614614
descriptive messages when something goes wrong, but this method is
615615
essentially just:
616616
617-
return ExampleModel.objects.create(**validated_attrs)
617+
return ExampleModel.objects.create(**validated_data)
618618
619619
If there are many to many fields present on the instance then they
620620
cannot be set until the model is instantiated, in which case the
621621
implementation is like so:
622622
623-
example_relationship = validated_attrs.pop('example_relationship')
624-
instance = ExampleModel.objects.create(**validated_attrs)
623+
example_relationship = validated_data.pop('example_relationship')
624+
instance = ExampleModel.objects.create(**validated_data)
625625
instance.example_relationship = example_relationship
626626
return instance
627627
@@ -633,8 +633,8 @@ def create(self, validated_attrs):
633633
# If we don't do this explicitly they'd likely get a confusing
634634
# error at the point of calling `Model.objects.create()`.
635635
assert not any(
636-
isinstance(field, BaseSerializer) and not field.read_only
637-
for field in self.fields.values()
636+
isinstance(field, BaseSerializer) and (key in validated_attrs)
637+
for key, field in self.fields.items()
638638
), (
639639
'The `.create()` method does not suport nested writable fields '
640640
'by default. Write an explicit `.create()` method for serializer '
@@ -644,17 +644,17 @@ def create(self, validated_attrs):
644644

645645
ModelClass = self.Meta.model
646646

647-
# Remove many-to-many relationships from validated_attrs.
647+
# Remove many-to-many relationships from validated_data.
648648
# They are not valid arguments to the default `.create()` method,
649649
# as they require that the instance has already been saved.
650650
info = model_meta.get_field_info(ModelClass)
651651
many_to_many = {}
652652
for field_name, relation_info in info.relations.items():
653-
if relation_info.to_many and (field_name in validated_attrs):
654-
many_to_many[field_name] = validated_attrs.pop(field_name)
653+
if relation_info.to_many and (field_name in validated_data):
654+
many_to_many[field_name] = validated_data.pop(field_name)
655655

656656
try:
657-
instance = ModelClass.objects.create(**validated_attrs)
657+
instance = ModelClass.objects.create(**validated_data)
658658
except TypeError as exc:
659659
msg = (
660660
'Got a `TypeError` when calling `%s.objects.create()`. '
@@ -679,18 +679,18 @@ def create(self, validated_attrs):
679679

680680
return instance
681681

682-
def update(self, instance, validated_attrs):
682+
def update(self, instance, validated_data):
683683
assert not any(
684-
isinstance(field, BaseSerializer) and not field.read_only
685-
for field in self.fields.values()
684+
isinstance(field, BaseSerializer) and (key in validated_attrs)
685+
for key, field in self.fields.items()
686686
), (
687687
'The `.update()` method does not suport nested writable fields '
688688
'by default. Write an explicit `.update()` method for serializer '
689689
'`%s.%s`, or set `read_only=True` on nested serializer fields.' %
690690
(self.__class__.__module__, self.__class__.__name__)
691691
)
692692

693-
for attr, value in validated_attrs.items():
693+
for attr, value in validated_data.items():
694694
setattr(instance, attr, value)
695695
instance.save()
696696
return instance

0 commit comments

Comments
 (0)