Commit 62e59f82 by Tom Christie

Merge pull request #900 from copitux/fix-validation-layer

Bugfix: Fix run validation layer with invalid data
parents b10869a0 c176af35
...@@ -315,6 +315,7 @@ class BaseSerializer(WritableField): ...@@ -315,6 +315,7 @@ class BaseSerializer(WritableField):
self._errors = {} self._errors = {}
if data is not None or files is not None: if data is not None or files is not None:
attrs = self.restore_fields(data, files) attrs = self.restore_fields(data, files)
if attrs is not None:
attrs = self.perform_validation(attrs) attrs = self.perform_validation(attrs)
else: else:
self._errors['non_field_errors'] = ['No input provided'] self._errors['non_field_errors'] = ['No input provided']
......
...@@ -63,3 +63,25 @@ class TestPreSaveValidationExclusions(TestCase): ...@@ -63,3 +63,25 @@ class TestPreSaveValidationExclusions(TestCase):
# does not have `blank=True`, so this serializer should not validate. # does not have `blank=True`, so this serializer should not validate.
serializer = ShouldValidateModelSerializer(data={'renamed': ''}) serializer = ShouldValidateModelSerializer(data={'renamed': ''})
self.assertEqual(serializer.is_valid(), False) 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']})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment