Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save orehush/adba82276de7d40376f498c0fd83f783 to your computer and use it in GitHub Desktop.
Save orehush/adba82276de7d40376f498c0fd83f783 to your computer and use it in GitHub Desktop.
Common validator for use in both rest framework serializers and django forms. Support overriding for default error messages and error field representation
class Validator(object):
"""
Validator for validate data,
which used for both rest framework serializers and django forms.
Support binding error message for several fields
if you override default error fields and set value as tuple.
"""
default_error_messages = {
"field1": "This field is required",
}
default_error_fields = {
"field1": "represent_field1"
}
def __init__(self, error_messages=None, error_fields=None):
error_messages = error_messages or {}
error_fields = error_fields or {}
self._errors = defaultdict(list)
self._error_messages = self.default_error_messages.copy()
self._error_messages.update(error_messages)
self._error_fields = self.default_error_fields.copy()
self._error_fields.update(error_fields)
@property
def error_messages(self):
return self._error_messages
@property
def error_fields(self):
return self._error_fields
@property
def errors(self):
return self._errors
def add_error(self, key):
field = self.error_fields[key]
msg = self.error_messages[key]
if isinstance(field, tuple):
for f in field:
self._errors[f].append(msg)
else:
self._errors[field].append(msg)
def validate_field1(self, value):
if not value:
self.add_error("field1")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment