Overriding Field.__deepcopy__ for RegexField

Compiled regex pattern cannot be deepcopied. The overridden
__deepcopy__ mimics the behavior as the parent method, but
checks for `regex` instead of `validators`
This commit is contained in:
Kevin Chang 2015-02-27 13:51:14 -08:00
parent 33c4278ec8
commit 26eb7c786b

View File

@ -612,6 +612,18 @@ class RegexField(CharField):
validator = RegexValidator(regex, message=self.error_messages['invalid'])
self.validators.append(validator)
def __deepcopy__(self, memo):
# Handling case when regex is not passed in kwargs.
args = self._args[:1] + copy.deepcopy(self._args[1:])
kwargs = dict(self._kwargs)
# deepcopy doesn't work on compiled regex pattern
regex = kwargs.pop('regex', None)
kwargs = copy.deepcopy(kwargs)
if regex is not None:
kwargs['regex'] = regex
return self.__class__(*args, **kwargs)
class SlugField(CharField):
default_error_messages = {