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 | |
| 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)
| -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()] |
