diff options
| author | Tom Christie | 2014-10-16 20:45:18 +0100 |
|---|---|---|
| committer | Tom Christie | 2014-10-16 20:47:57 +0100 |
| commit | 7b666e982c461e237567435851dcc93bc76581e5 (patch) | |
| tree | 9832691eaada29804db5489864ca39eba569a39b /rest_framework/serializers.py | |
| parent | d0f610be4457947f78d20da4f2bdb04ef52d0db3 (diff) | |
| download | django-rest-framework-7b666e982c461e237567435851dcc93bc76581e5.tar.bz2 | |
Stricter checking for failure cases.
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 27 |
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() |
