aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2012-12-06 14:35:57 -0800
committerTom Christie2012-12-06 14:35:57 -0800
commite2175eb71b3aeab4b60378302725694a1bbf6852 (patch)
tree3611fd0a8d234f5c07355cdde444bb9ca89f8a9a /rest_framework/serializers.py
parent2938bc13b12ec73084c21e629bdde4a20a1de0cb (diff)
parent1c1bd3fc5d7e65ae8c16e9946be87956c96a1723 (diff)
downloaddjango-rest-framework-e2175eb71b3aeab4b60378302725694a1bbf6852.tar.bz2
Merge pull request #462 from asfaltboy/modelserializer_traverse_related
ModelSerializer traverse related
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 4519ab05..e63f4783 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -272,10 +272,18 @@ class BaseSerializer(Field):
Override default so that we can apply ModelSerializer as a nested
field to relationships.
"""
- obj = getattr(obj, self.source or field_name)
- if is_simple_callable(obj):
- obj = obj()
+ if self.source:
+ value = obj
+ for component in self.source.split('.'):
+ value = getattr(value, component)
+ if is_simple_callable(value):
+ value = value()
+ obj = value
+ else:
+ value = getattr(obj, field_name)
+ if is_simple_callable(value):
+ obj = value()
# If the object has an "all" method, assume it's a relationship
if is_simple_callable(getattr(obj, 'all', None)):