diff options
| author | Stephan Groß | 2012-11-21 03:00:02 -0800 |
|---|---|---|
| committer | Stephan Groß | 2012-11-21 03:00:02 -0800 |
| commit | 196fa5e94f5348dbb3873a5c87561416b16ea013 (patch) | |
| tree | 36ef44691a8f8bf4b18e080c6e2e9c470198bdfc /rest_framework/fields.py | |
| parent | 3268c67343f6fc6364a0127a7bfabeb907a4751d (diff) | |
| parent | 03100168ff96dd4a09ee7c8a5a63b294abe99dfe (diff) | |
| download | django-rest-framework-196fa5e94f5348dbb3873a5c87561416b16ea013.tar.bz2 | |
Merge pull request #436 from minddust/regex_field
added RegexField
Diffstat (limited to 'rest_framework/fields.py')
| -rw-r--r-- | rest_framework/fields.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 9dce0143..25d98645 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 io import BytesIO @@ -802,6 +803,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' |
