aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2015-01-05 15:04:23 +0000
committerTom Christie2015-01-05 15:04:23 +0000
commit949e3b7507ee4e7b0c571cb6a7eba076dee91a38 (patch)
treedadb26c5c8c40b2aaafad85608470e50c10c1370 /rest_framework
parent49dc037a961b618baf8eb189b094633238867b41 (diff)
parent6fd33ddea9e5b8f9e979e573a27873131846ea48 (diff)
downloaddjango-rest-framework-949e3b7507ee4e7b0c571cb6a7eba076dee91a38.tar.bz2
Merge branch 'master' into version-3.1
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/fields.py2
-rw-r--r--rest_framework/serializers.py8
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)