|
7 | 7 | from django.utils import six, encoding |
8 | 8 | from django.utils.translation import ugettext_lazy as _ |
9 | 9 | from rest_framework.serializers import BaseSerializer, ListSerializer, ModelSerializer |
10 | | -from rest_framework.relations import RelatedField, HyperlinkedRelatedField, PrimaryKeyRelatedField |
| 10 | +from rest_framework.relations import RelatedField, HyperlinkedRelatedField, PrimaryKeyRelatedField, \ |
| 11 | + HyperlinkedIdentityField |
11 | 12 | from rest_framework.settings import api_settings |
12 | 13 | from rest_framework.exceptions import APIException |
13 | 14 |
|
@@ -152,10 +153,15 @@ def get_related_resource_type(relation): |
152 | 153 | parent_model = parent_serializer.Meta.model |
153 | 154 | else: |
154 | 155 | parent_model = parent_serializer.parent.Meta.model |
155 | | - parent_model_relation = getattr( |
156 | | - parent_model, |
157 | | - (relation.source if relation.source else parent_serializer.field_name) |
158 | | - ) |
| 156 | + |
| 157 | + if relation.source: |
| 158 | + if relation.source != '*': |
| 159 | + parent_model_relation = getattr(parent_model, relation.source) |
| 160 | + else: |
| 161 | + parent_model_relation = getattr(parent_model, relation.field_name) |
| 162 | + else: |
| 163 | + parent_model_relation = getattr(parent_model, parent_serializer.field_name) |
| 164 | + |
159 | 165 | if hasattr(parent_model_relation, 'related'): |
160 | 166 | relation_model = parent_model_relation.related.model |
161 | 167 | elif hasattr(parent_model_relation, 'field'): |
@@ -213,8 +219,8 @@ def extract_relationships(fields, resource, resource_instance): |
213 | 219 | if not isinstance(field, (RelatedField, ManyRelatedField, BaseSerializer)): |
214 | 220 | continue |
215 | 221 |
|
216 | | - if isinstance(field, HyperlinkedRouterField): |
217 | | - # special case for HyperlinkedRouterField |
| 222 | + if isinstance(field, HyperlinkedIdentityField): |
| 223 | + # special case for HyperlinkedIdentityField |
218 | 224 | relation_data = list() |
219 | 225 | relation_type = get_related_resource_type(field) |
220 | 226 | related = getattr(resource_instance, field_name).all() |
|
0 commit comments