aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Groß2012-11-20 15:38:50 +0100
committerStephan Groß2012-11-20 15:38:50 +0100
commit86484668f689864aa54e127a8107bdee55240cea (patch)
tree0704ed993643ab4487dafad6c7d9a2fa01589f26
parent44e9749e36d31f811db7dc0998c7b8d1e35a784d (diff)
downloaddjango-rest-framework-86484668f689864aa54e127a8107bdee55240cea.tar.bz2
added RegexField
-rw-r--r--docs/api-guide/fields.md10
-rw-r--r--docs/topics/release-notes.md1
-rw-r--r--rest_framework/fields.py29
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'