aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2013-08-23 14:06:14 +0100
committerTom Christie2013-08-23 14:06:14 +0100
commite03854ba6a74428675c40d469a7768cc5131035f (patch)
tree4f65e56adf3582a9801a044409022c5f90eabd00
parent315435d00ae6bcdab3a4f3a6e7128e2d1ea92b0d (diff)
downloaddjango-rest-framework-e03854ba6a74428675c40d469a7768cc5131035f.tar.bz2
Tweaks to display nested data in empty serializers
-rw-r--r--rest_framework/relations.py9
-rw-r--r--rest_framework/serializers.py4
2 files changed, 9 insertions, 4 deletions
diff --git a/rest_framework/relations.py b/rest_framework/relations.py
index edaf76d6..7408758e 100644
--- a/rest_framework/relations.py
+++ b/rest_framework/relations.py
@@ -134,9 +134,9 @@ class RelatedField(WritableField):
value = obj
for component in source.split('.'):
- value = get_component(value, component)
if value is None:
break
+ value = get_component(value, component)
except ObjectDoesNotExist:
return None
@@ -567,8 +567,13 @@ class HyperlinkedIdentityField(Field):
May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
attributes are not configured to correctly match the URL conf.
"""
- lookup_field = getattr(obj, self.lookup_field)
+ lookup_field = getattr(obj, self.lookup_field, None)
kwargs = {self.lookup_field: lookup_field}
+
+ # Handle unsaved object case
+ if lookup_field is None:
+ return None
+
try:
return reverse(view_name, kwargs=kwargs, request=request, format=format)
except NoReverseMatch:
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 2b260c25..22525964 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -338,9 +338,9 @@ class BaseSerializer(WritableField):
value = obj
for component in source.split('.'):
- value = get_component(value, component)
if value is None:
- break
+ return self.to_native(None)
+ value = get_component(value, component)
except ObjectDoesNotExist:
return None