Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions rest_framework_friendly_errors/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,8 @@ def get_field_error_entry(self, error, field):
'message': error}
# Here we know that error was raised by custom validate method
# in serializer
validator = getattr(self, "validate_%s" % field.field_name)
if self._run_validator(validator, field, error):
validator = getattr(self, "validate_%s" % field.field_name, None)
if validator and self._run_validator(validator, field, error):
name = validator.__name__
code = self.FIELD_VALIDATION_ERRORS.get(name) or settings.FRIENDLY_VALIDATOR_ERRORS.get(name)
return {'code': code, 'field': field.field_name,
Expand Down
19 changes: 19 additions & 0 deletions tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ class SimpleSerializerClass(FriendlyErrorMessagesMixin, serializers.Serializer):
boolean_field = serializers.BooleanField(default=True)


class CustomField(serializers.Field):

def to_internal_value(self, data):
raise serializers.ValidationError('Custom field error')

def to_representation(self, value):
return value


class CustomFieldSerializer(FriendlyErrorMessagesMixin, serializers.Serializer):
custom = CustomField()


class SanityTestCase(BaseTestCase):

def test_serializer_valid(self):
Expand Down Expand Up @@ -151,6 +164,12 @@ def test_custom_field_validation_using_validators(self):
self.assertEqual(s.errors['errors'][0]['field'], 'title')
self.assertEqual(s.errors['errors'][0]['code'], 5001)

def test_custom_field_validation_error_without_validate_method(self):
s = run_is_valid(CustomFieldSerializer, data={'custom': 'invalid'})
self.assertEqual(s.errors['errors'][0]['field'], 'custom')
self.assertEqual(s.errors['errors'][0]['message'],
'Custom field error')

def test_field_dependency_validation(self):
self.data_set['title'] = 'A Python'
self.data_set['language'] = 'c++'
Expand Down