diff options
| author | Craig de Stigter | 2013-03-01 16:13:04 +1300 | 
|---|---|---|
| committer | Craig de Stigter | 2013-03-01 16:13:04 +1300 | 
| commit | 84be169353f0dd2ceb06fe459b72aa2452fcbeb5 (patch) | |
| tree | df6d7a4e42d7b41e83554b1a6839bafbf7165042 /rest_framework/relations.py | |
| parent | 282af6057f30b5af4665d687200ee1ebf82fcf00 (diff) | |
| download | django-rest-framework-84be169353f0dd2ceb06fe459b72aa2452fcbeb5.tar.bz2 | |
fix function names and dotted lookups for use in PrimaryKeyRelatedField.field_to_native (they work in RelatedField.field_to_native already)
Diffstat (limited to 'rest_framework/relations.py')
| -rw-r--r-- | rest_framework/relations.py | 16 | 
1 files changed, 12 insertions, 4 deletions
| diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 0c108717..ef465b3c 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -215,12 +215,20 @@ class PrimaryKeyRelatedField(RelatedField):      def field_to_native(self, obj, field_name):          if self.many:              # To-many relationship -            try: + +            queryset = None +            if not self.source:                  # Prefer obj.serializable_value for performance reasons -                queryset = obj.serializable_value(self.source or field_name) -            except AttributeError: +                try: +                    queryset = obj.serializable_value(field_name) +                except AttributeError: +                    pass +            if queryset is None:                  # RelatedManager (reverse relationship) -                queryset = getattr(obj, self.source or field_name) +                source = self.source or field_name +                queryset = obj +                for component in source.split('.'): +                    queryset = get_component(queryset, component)              # Forward relationship              return [self.to_native(item.pk) for item in queryset.all()] | 
