diff options
| author | Tom Christie | 2012-12-06 14:35:57 -0800 |
|---|---|---|
| committer | Tom Christie | 2012-12-06 14:35:57 -0800 |
| commit | e2175eb71b3aeab4b60378302725694a1bbf6852 (patch) | |
| tree | 3611fd0a8d234f5c07355cdde444bb9ca89f8a9a /rest_framework/serializers.py | |
| parent | 2938bc13b12ec73084c21e629bdde4a20a1de0cb (diff) | |
| parent | 1c1bd3fc5d7e65ae8c16e9946be87956c96a1723 (diff) | |
| download | django-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.py | 14 |
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)): |
