Skip to content

Commit 36b3a1b

Browse files
committed
Merge pull request #94 from martinmaillard/related-instances-type
Extract type for each related instance
2 parents 10a503b + c864c97 commit 36b3a1b

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

rest_framework_json_api/utils.py

+11-12
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@ def build_json_resource_obj(fields, resource, resource_instance, resource_name):
168168

169169

170170
def get_related_resource_type(relation):
171-
if hasattr(relation, 'get_queryset') and relation.get_queryset() is not None:
171+
if hasattr(relation, '_meta'):
172+
relation_model = relation._meta.model
173+
elif hasattr(relation, 'get_queryset') and relation.get_queryset() is not None:
172174
relation_model = relation.get_queryset().model
173175
else:
174176
parent_serializer = relation.parent
@@ -270,11 +272,10 @@ def extract_relationships(fields, resource, resource_instance):
270272

271273
if isinstance(field, ManyRelatedField):
272274
relation_data = list()
273-
related_object = field.child_relation
274-
relation_type = get_related_resource_type(related_object)
275275
for related_object in relation_instance_or_manager.all():
276+
related_object_type = get_related_resource_type(related_object)
276277
relation_data.append(OrderedDict([
277-
('type', relation_type),
278+
('type', related_object_type),
278279
('id', encoding.force_text(related_object.pk))
279280
]))
280281
data.update({
@@ -289,20 +290,18 @@ def extract_relationships(fields, resource, resource_instance):
289290

290291
if isinstance(field, ListSerializer):
291292
relation_data = list()
292-
serializer = field.child
293-
relation_model = serializer.Meta.model
294-
relation_type = format_relation_name(relation_model.__name__)
295293

296294
serializer_data = resource.get(field_name)
297295
resource_instance_queryset = relation_instance_or_manager.all()
298296
if isinstance(serializer_data, list):
299297
for position in range(len(serializer_data)):
300298
nested_resource_instance = resource_instance_queryset[position]
301-
relation_data.append(
302-
OrderedDict(
303-
[('type', relation_type), ('id', encoding.force_text(nested_resource_instance.pk))]
304-
)
305-
)
299+
nested_resource_instance_type = get_related_resource_type(
300+
nested_resource_instance)
301+
relation_data.append(OrderedDict([
302+
('type', nested_resource_instance_type),
303+
('id', encoding.force_text(nested_resource_instance.pk))
304+
]))
306305

307306
data.update({field_name: {'data': relation_data}})
308307
continue

0 commit comments

Comments
 (0)