aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2014-10-16 20:45:18 +0100
committerTom Christie2014-10-16 20:47:57 +0100
commit7b666e982c461e237567435851dcc93bc76581e5 (patch)
tree9832691eaada29804db5489864ca39eba569a39b /rest_framework/serializers.py
parentd0f610be4457947f78d20da4f2bdb04ef52d0db3 (diff)
downloaddjango-rest-framework-7b666e982c461e237567435851dcc93bc76581e5.tar.bz2
Stricter checking for failure cases.
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 2066fcf7..f72ecb0b 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -77,6 +77,13 @@ class BaseSerializer(Field):
raise NotImplementedError('`create()` must be implemented.')
def save(self, **kwargs):
+ assert not hasattr(self, 'restore_object'), (
+ 'Serializer %s has old-style version 2 `.restore_object()` '
+ 'that is no longer compatible with REST framework 3. '
+ 'Use the new-style `.create()` and `.update()` methods instead.' %
+ self.__class__.__name__
+ )
+
validated_data = self.validated_data
if kwargs:
validated_data = dict(
@@ -494,6 +501,16 @@ class ModelSerializer(Serializer):
self._kwargs['validators'] = validators
def create(self, validated_attrs):
+ assert not any(
+ isinstance(field, BaseSerializer) and not field.read_only
+ for field in self.fields.values()
+ ), (
+ 'The `.create()` method does not suport nested writable fields '
+ 'by default. Write an explicit `.create()` method for serializer '
+ '%s, or set `read_only=True` on nested serializer fields.' %
+ self.__class__.__name__
+ )
+
ModelClass = self.Meta.model
# Remove many-to-many relationships from validated_attrs.
@@ -515,6 +532,16 @@ class ModelSerializer(Serializer):
return instance
def update(self, instance, validated_attrs):
+ assert not any(
+ isinstance(field, BaseSerializer) and not field.read_only
+ for field in self.fields.values()
+ ), (
+ 'The `.update()` method does not suport nested writable fields '
+ 'by default. Write an explicit `.update()` method for serializer '
+ '%s, or set `read_only=True` on nested serializer fields.' %
+ self.__class__.__name__
+ )
+
for attr, value in validated_attrs.items():
setattr(instance, attr, value)
instance.save()