diff options
| author | David Medina | 2013-05-29 12:47:43 +0200 |
|---|---|---|
| committer | David Medina | 2013-05-29 12:55:42 +0200 |
| commit | d11b55648ca657d7036a312cafe6c76db491d3cc (patch) | |
| tree | 5817db29fdb3e112042fae69c7a67a5366a27215 | |
| parent | 85fe7197bfecd80774f15db26833a44ba5f5d570 (diff) | |
| download | django-rest-framework-d11b55648ca657d7036a312cafe6c76db491d3cc.tar.bz2 | |
Bugfix: Fix run validation layer with invalid data
| -rw-r--r-- | rest_framework/serializers.py | 3 | ||||
| -rw-r--r-- | rest_framework/tests/test_validation.py | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3e5c366e..e7b8fdc0 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -315,7 +315,8 @@ class BaseSerializer(WritableField): self._errors = {} if data is not None or files is not None: attrs = self.restore_fields(data, files) - attrs = self.perform_validation(attrs) + if attrs is not None: + attrs = self.perform_validation(attrs) else: self._errors['non_field_errors'] = ['No input provided'] diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py index cbdd6515..5202ebe4 100644 --- a/rest_framework/tests/test_validation.py +++ b/rest_framework/tests/test_validation.py @@ -63,3 +63,16 @@ class TestPreSaveValidationExclusions(TestCase): # does not have `blank=True`, so this serializer should not validate. serializer = ShouldValidateModelSerializer(data={'renamed': ''}) self.assertEqual(serializer.is_valid(), False) + + +class FieldValidationSerializer(serializers.Serializer): + foo = serializers.CharField() + + def validate_foo(self, attrs, source): + raise StandardError("validate_foo was called") + + +class TestFieldValidationWithInvalidData(TestCase): + def test_validate_foo_was_not_called(self): + serializer = FieldValidationSerializer(data='invalid data') + self.assertFalse(serializer.is_valid()) |
