aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Medina2013-05-29 12:47:43 +0200
committerDavid Medina2013-05-29 12:55:42 +0200
commitd11b55648ca657d7036a312cafe6c76db491d3cc (patch)
tree5817db29fdb3e112042fae69c7a67a5366a27215
parent85fe7197bfecd80774f15db26833a44ba5f5d570 (diff)
downloaddjango-rest-framework-d11b55648ca657d7036a312cafe6c76db491d3cc.tar.bz2
Bugfix: Fix run validation layer with invalid data
-rw-r--r--rest_framework/serializers.py3
-rw-r--r--rest_framework/tests/test_validation.py13
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())