diff options
| author | Tom Christie | 2013-05-18 03:38:36 -0700 |
|---|---|---|
| committer | Tom Christie | 2013-05-18 03:38:36 -0700 |
| commit | 9fe6a103ec8d43eded7089f7d0c75a49ca45bb3b (patch) | |
| tree | c146c9d9f5204e6548a16cb7dd7cffc248f56b75 /rest_framework/relations.py | |
| parent | a73c16b85f79aeb9139734a64623b49bc169fce9 (diff) | |
| parent | c992b600f7b0aefb156cddb5e27b438ccc316b39 (diff) | |
| download | django-rest-framework-9fe6a103ec8d43eded7089f7d0c75a49ca45bb3b.tar.bz2 | |
Merge pull request #694 from craigds/master
fix function names and dotted lookups for use in PrimaryKeyRelatedField
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 c4b790d4..884b954c 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -221,12 +221,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()] |
