aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2013-06-03 00:49:02 -0700
committerTom Christie2013-06-03 00:49:02 -0700
commit62e59f8277afdde2e35185391d8e805c4f16cf22 (patch)
treec20bdf0a6427778ec71d7e9fb73ca5b16c243482 /rest_framework
parentb10869a08b4effac9b8df1d776e6ffb882a1a742 (diff)
parentc176af35e5ad18e8aced7156af7f4791e8f23ca2 (diff)
downloaddjango-rest-framework-62e59f8277afdde2e35185391d8e805c4f16cf22.tar.bz2
Merge pull request #900 from copitux/fix-validation-layer
Bugfix: Fix run validation layer with invalid data
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/serializers.py3
-rw-r--r--rest_framework/tests/test_validation.py22
2 files changed, 24 insertions, 1 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index a4969f60..11ead02e 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..a6ec0e99 100644
--- a/rest_framework/tests/test_validation.py
+++ b/rest_framework/tests/test_validation.py
@@ -63,3 +63,25 @@ 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 ValidationSerializer(serializers.Serializer):
+ foo = serializers.CharField()
+
+ def validate_foo(self, attrs, source):
+ raise serializers.ValidationError("foo invalid")
+
+ def validate(self, attrs):
+ raise serializers.ValidationError("serializer invalid")
+
+
+class TestAvoidValidation(TestCase):
+ """
+ If serializer was initialized with invalid data (None or non dict-like), it
+ should avoid validation layer (validate_<field> and validate methods)
+ """
+ def test_serializer_errors_has_only_invalid_data_error(self):
+ serializer = ValidationSerializer(data='invalid data')
+ self.assertFalse(serializer.is_valid())
+ self.assertDictEqual(serializer.errors,
+ {'non_field_errors': ['Invalid data']})