diff options
| author | Tom Christie | 2014-10-31 16:38:39 +0000 | 
|---|---|---|
| committer | Tom Christie | 2014-10-31 16:38:39 +0000 | 
| commit | 207208fedff2457e921ef7d825ea7c3933b5dd6e (patch) | |
| tree | 82ef4afacbc78d7af6f13fb73342794a1102415f /rest_framework/fields.py | |
| parent | 11075d37709d1ee41f14361cb521ff8d1aa0cc1d (diff) | |
| download | django-rest-framework-207208fedff2457e921ef7d825ea7c3933b5dd6e.tar.bz2 | |
Lazy loading of fields and validators. Closes #1963.
Diffstat (limited to 'rest_framework/fields.py')
| -rw-r--r-- | rest_framework/fields.py | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d5dccd72..8cc8e81e 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -143,7 +143,7 @@ class Field(object):      def __init__(self, read_only=False, write_only=False,                   required=None, default=empty, initial=empty, source=None,                   label=None, help_text=None, style=None, -                 error_messages=None, validators=[], allow_null=False): +                 error_messages=None, validators=None, allow_null=False):          self._creation_counter = Field._creation_counter          Field._creation_counter += 1 @@ -166,9 +166,11 @@ class Field(object):          self.label = label          self.help_text = help_text          self.style = {} if style is None else style -        self.validators = validators[:] or self.default_validators[:]          self.allow_null = allow_null +        if validators is not None: +            self.validators = validators[:] +          # These are set up by `.bind()` when the field is added to a serializer.          self.field_name = None          self.parent = None @@ -214,6 +216,21 @@ class Field(object):          else:              self.source_attrs = self.source.split('.') +    # .validators is a lazily loaded property, that gets its default +    # value from `get_validators`. +    @property +    def validators(self): +        if not hasattr(self, '_validators'): +            self._validators = self.get_validators() +        return self._validators + +    @validators.setter +    def validators(self, validators): +        self._validators = validators + +    def get_validators(self): +        return self.default_validators[:] +      def get_initial(self):          """          Return a value to use when the field is being returned as a primitive | 
