Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 11 additions & 12 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /