|
14 | 14 | from rest_framework.settings import api_settings |
15 | 15 | from rest_framework.exceptions import APIException |
16 | 16 |
|
| 17 | + |
17 | 18 | try: |
18 | 19 | from rest_framework.serializers import ManyRelatedField |
19 | 20 | except ImportError: |
@@ -164,12 +165,22 @@ def build_json_resource_obj(fields, resource, resource_instance, resource_name): |
164 | 165 | return OrderedDict(resource_data) |
165 | 166 |
|
166 | 167 |
|
| 168 | +def _extract_model(relation): |
| 169 | + from rest_framework_json_api.relations import ResourceRelatedField |
| 170 | + if isinstance(relation, ManyRelatedField): |
| 171 | + if isinstance(relation.child_relation, ResourceRelatedField): |
| 172 | + return getattr(relation.child_relation, 'model', None) |
| 173 | + if isinstance(relation, ResourceRelatedField): |
| 174 | + return getattr(relation, 'model', None) |
| 175 | + return None |
| 176 | + |
| 177 | + |
167 | 178 | def get_related_resource_type(relation): |
168 | 179 | if hasattr(relation, '_meta'): |
169 | 180 | relation_model = relation._meta.model |
170 | | - elif hasattr(relation, 'model'): |
| 181 | + elif _extract_model(relation) is not None: |
171 | 182 | # the model type was explicitly passed as a kwarg to ResourceRelatedField |
172 | | - relation_model = relation.model |
| 183 | + relation_model = _extract_model(relation) |
173 | 184 | elif hasattr(relation, 'get_queryset') and relation.get_queryset() is not None: |
174 | 185 | relation_model = relation.get_queryset().model |
175 | 186 | else: |
|
0 commit comments