diff options
author | Stephan Groß | 2012-11-20 15:38:50 +0100 |
---|---|---|
committer | Stephan Groß | 2012-11-20 15:38:50 +0100 |
commit | 86484668f689864aa54e127a8107bdee55240cea (patch) | |
tree | 0704ed993643ab4487dafad6c7d9a2fa01589f26 | |
parent | 44e9749e36d31f811db7dc0998c7b8d1e35a784d (diff) | |
download | django-rest-framework-86484668f689864aa54e127a8107bdee55240cea.tar.bz2 |
added RegexField
-rw-r--r-- | docs/api-guide/fields.md | 10 | ||||
-rw-r--r-- | docs/topics/release-notes.md | 1 | ||||
-rw-r--r-- | rest_framework/fields.py | 29 |
3 files changed, 40 insertions, 0 deletions
diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 0485b158..cb30a52e 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -141,6 +141,16 @@ A text representation, validates the text to be a valid e-mail address. Corresponds to `django.db.models.fields.EmailField` +## RegexField + +A text representation, that validates the given value matches against a certain regular expression. + +Uses Django's `django.core.validators.RegexValidator` for validation. + +Corresponds to `django.forms.fields.RegexField` + +**Signature:** `RegexField(regex, max_length=None, min_length=None)` + ## DateField A date representation. diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index 35e8a8b3..e4e67635 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -7,6 +7,7 @@ ## Master * Support for `read_only_fields` on `ModelSerializer` classes. +* Added `RegexField`. ## 2.1.2 diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 4c206426..071746de 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1,6 +1,7 @@ import copy import datetime import inspect +import re import warnings from django.core import validators @@ -768,6 +769,34 @@ class EmailField(CharField): return result +class RegexField(CharField): + type_name = 'RegexField' + + def __init__(self, regex, max_length=None, min_length=None, *args, **kwargs): + super(RegexField, self).__init__(max_length, min_length, *args, **kwargs) + self.regex = regex + + def _get_regex(self): + return self._regex + + def _set_regex(self, regex): + if isinstance(regex, basestring): + regex = re.compile(regex) + self._regex = regex + if hasattr(self, '_regex_validator') and self._regex_validator in self.validators: + self.validators.remove(self._regex_validator) + self._regex_validator = validators.RegexValidator(regex=regex) + self.validators.append(self._regex_validator) + + regex = property(_get_regex, _set_regex) + + def __deepcopy__(self, memo): + result = copy.copy(self) + memo[id(self)] = result + result.validators = self.validators[:] + return result + + class DateField(WritableField): type_name = 'DateField' |