diff options
| author | Tom Christie | 2013-02-12 23:03:04 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-02-12 23:03:04 +0000 |
| commit | 018298deb89628b39e1caeceecb414c1e27310da (patch) | |
| tree | b363c9b146091e2b4971c0652561901e349a54a2 | |
| parent | f341ead49944050b7902254ed4c89b3c9c11a018 (diff) | |
| download | django-rest-framework-018298deb89628b39e1caeceecb414c1e27310da.tar.bz2 | |
Relational fields use same field_to_native logic as regular fields.
Fixes #637. Closes #638.
| -rw-r--r-- | rest_framework/relations.py | 13 |
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 |
