diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 037939e31..a3c26e1ee 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -166,6 +166,12 @@ class BaseSerializer(Field): "For example: 'serializer.save(owner=request.user)'.'" ) + assert not hasattr(self, '_data'), ( + "You cannot call `.save()` after accessing `serializer.data`." + "If you need to access data before committing to the database then " + "inspect 'serializer.validated_data' instead. " + ) + validated_data = dict( list(self.validated_data.items()) + list(kwargs.items()) diff --git a/tests/test_serializer.py b/tests/test_serializer.py index e99efe3d2..741c6ab17 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -61,6 +61,7 @@ class TestSerializer: with pytest.raises(AssertionError): serializer.save() + class TestValidateMethod: def test_non_field_error_validate_method(self): class ExampleSerializer(serializers.Serializer):