diff options
| author | Anton Shutik | 2014-02-27 18:34:36 +0300 | 
|---|---|---|
| committer | Anton Shutik | 2014-02-27 18:34:36 +0300 | 
| commit | 1addd09e2b0e26507aada864123f610ead62d8da (patch) | |
| tree | fd7fbeea4220d752b9811bbf5c5c0714a5716735 | |
| parent | 6e92e415aa7dd6871ef7d6500a85cacebde8dca2 (diff) | |
| download | django-rest-framework-1addd09e2b0e26507aada864123f610ead62d8da.tar.bz2 | |
RelatedField default value handling fixed
| -rw-r--r-- | rest_framework/fields.py | 10 | ||||
| -rw-r--r-- | rest_framework/relations.py | 9 | 
2 files changed, 14 insertions, 5 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 05daaab7..68b95682 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -301,6 +301,11 @@ class WritableField(Field):          result.validators = self.validators[:]          return result +    def get_default_value(self): +        if is_simple_callable(self.default): +            return self.default() +        return self.default +      def validate(self, value):          if value in validators.EMPTY_VALUES and self.required:              raise ValidationError(self.error_messages['required']) @@ -349,10 +354,7 @@ class WritableField(Field):          except KeyError:              if self.default is not None and not self.partial:                  # Note: partial updates shouldn't set defaults -                if is_simple_callable(self.default): -                    native = self.default() -                else: -                    native = self.default +                native = self.get_default_value()              else:                  if self.required:                      raise ValidationError(self.error_messages['required']) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 02185c2f..626454ac 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -118,6 +118,13 @@ class RelatedField(WritableField):      choices = property(_get_choices, _set_choices) +    ### Default value handling + +    def get_default_value(self): +        default = super(RelatedField, self).get_default_value() +        return default or \ +            [] if self.many else None +      ### Regular serializer stuff...      def field_to_native(self, obj, field_name): @@ -166,7 +173,7 @@ class RelatedField(WritableField):          except KeyError:              if self.partial:                  return -            value = [] if self.many else None +            value = self.get_default_value()          if value in (None, '') and self.required:              raise ValidationError(self.error_messages['required'])  | 
