diff options
| author | Tom Christie | 2015-01-05 15:04:23 +0000 |
|---|---|---|
| committer | Tom Christie | 2015-01-05 15:04:23 +0000 |
| commit | 949e3b7507ee4e7b0c571cb6a7eba076dee91a38 (patch) | |
| tree | dadb26c5c8c40b2aaafad85608470e50c10c1370 /rest_framework | |
| parent | 49dc037a961b618baf8eb189b094633238867b41 (diff) | |
| parent | 6fd33ddea9e5b8f9e979e573a27873131846ea48 (diff) | |
| download | django-rest-framework-949e3b7507ee4e7b0c571cb6a7eba076dee91a38.tar.bz2 | |
Merge branch 'master' into version-3.1
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/fields.py | 2 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index aab80982..cc9410aa 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -288,6 +288,8 @@ class Field(object): try: return get_attribute(instance, self.source_attrs) except (KeyError, AttributeError) as exc: + if not self.required and self.default is empty: + raise SkipField() msg = ( 'Got {exc_type} when attempting to get a value for field ' '`{field}` on serializer `{serializer}`.\nThe serializer ' diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 08a58433..d1bd3ec3 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -421,8 +421,14 @@ class Serializer(BaseSerializer): fields = [field for field in self.fields.values() if not field.write_only] for field in fields: - attribute = field.get_attribute(instance) + try: + attribute = field.get_attribute(instance) + except SkipField: + continue + if attribute is None: + # We skip `to_representation` for `None` values so that + # fields do not have to explicitly deal with that case. ret[field.field_name] = None else: ret[field.field_name] = field.to_representation(attribute) |
