aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/relations.py
diff options
context:
space:
mode:
authorTom Christie2013-02-12 23:03:04 +0000
committerTom Christie2013-02-12 23:03:04 +0000
commit018298deb89628b39e1caeceecb414c1e27310da (patch)
treeb363c9b146091e2b4971c0652561901e349a54a2 /rest_framework/relations.py
parentf341ead49944050b7902254ed4c89b3c9c11a018 (diff)
downloaddjango-rest-framework-018298deb89628b39e1caeceecb414c1e27310da.tar.bz2
Relational fields use same field_to_native logic as regular fields.
Fixes #637. Closes #638.
Diffstat (limited to 'rest_framework/relations.py')
-rw-r--r--rest_framework/relations.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/rest_framework/relations.py b/rest_framework/relations.py
index 24e8e15c..0c108717 100644
--- a/rest_framework/relations.py
+++ b/rest_framework/relations.py
@@ -5,7 +5,7 @@ from django import forms
from django.forms import widgets
from django.forms.models import ModelChoiceIterator
from django.utils.translation import ugettext_lazy as _
-from rest_framework.fields import Field, WritableField
+from rest_framework.fields import Field, WritableField, get_component
from rest_framework.reverse import reverse
from rest_framework.compat import urlparse
from rest_framework.compat import smart_text
@@ -116,7 +116,16 @@ class RelatedField(WritableField):
def field_to_native(self, obj, field_name):
try:
- value = getattr(obj, self.source or field_name)
+ if self.source == '*':
+ return self.to_native(obj)
+
+ source = self.source or field_name
+ value = obj
+
+ for component in source.split('.'):
+ value = get_component(value, component)
+ if value is None:
+ break
except ObjectDoesNotExist:
return None