aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorIan Foote2014-04-13 17:26:15 +0100
committerIan Foote2014-04-13 17:33:45 +0100
commit853c7a16c15c7291561bc4b3dfbcad88ea262a18 (patch)
treef83e3a6f5271c8a9827f5622886fc10da39f4c75 /rest_framework/serializers.py
parent0a0e4f22e72badd1d8700a2b253cb27450a5319f (diff)
downloaddjango-rest-framework-853c7a16c15c7291561bc4b3dfbcad88ea262a18.tar.bz2
Use setattr for adding fields to a new instance
Add test for restoring a GenericForeignKey
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py18
1 files changed, 8 insertions, 10 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 1d6097ed..ea9509bf 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -955,17 +955,15 @@ class ModelSerializer(Serializer):
if isinstance(self.fields.get(field_name, None), Serializer):
nested_forward_relations[field_name] = attrs[field_name]
- # Update an existing instance...
- if instance is not None:
- for key, val in attrs.items():
- try:
- setattr(instance, key, val)
- except ValueError:
- self._errors[key] = self.error_messages['required']
+ # Create an empty instance of the model
+ if instance is None:
+ instance = self.opts.model()
- # ...or create a new instance
- else:
- instance = self.opts.model(**attrs)
+ for key, val in attrs.items():
+ try:
+ setattr(instance, key, val)
+ except ValueError:
+ self._errors[key] = self.error_messages['required']
# Any relations that cannot be set until we've
# saved the model get hidden away on these