Skip to content

Commit c67445b

Browse files
committed
Reverse the included relation name formatting
1 parent c37d3f4 commit c67445b

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

rest_framework_json_api/renderers.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -406,10 +406,12 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
406406

407407
include_resources_param = request.query_params.get('include') if request else None
408408
if include_resources_param:
409-
included_resources = include_resources_param.split(',')
409+
included_resources = [".".join([utils.parse_relation_name(part) for part in resource.split('.')])
410+
for resource in include_resources_param.split(',')]
410411
else:
411412
included_resources = list()
412413

414+
413415
json_api_included = list()
414416
# initialize json_api_meta with pagination meta or an empty dict
415417
json_api_meta = data.get('meta', {}) if isinstance(data, dict) else {}

rest_framework_json_api/serializers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from rest_framework_json_api.relations import ResourceRelatedField
66
from rest_framework_json_api.utils import (
77
get_resource_type_from_model, get_resource_type_from_instance,
8-
get_resource_type_from_serializer, get_included_serializers)
8+
get_resource_type_from_serializer, get_included_serializers, parse_relation_name)
99

1010

1111
class ResourceIdentifierObjectSerializer(BaseSerializer):
@@ -75,7 +75,7 @@ def validate_path(serializer_class, field_path, path):
7575
serializers = get_included_serializers(serializer_class)
7676
if serializers is None:
7777
raise ParseError('This endpoint does not support the include parameter')
78-
this_field_name = field_path[0]
78+
this_field_name = parse_relation_name(field_path[0])
7979
this_included_serializer = serializers.get(this_field_name)
8080
if this_included_serializer is None:
8181
raise ParseError(

rest_framework_json_api/utils.py

+11
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,17 @@ def format_relation_name(value, format_type=None):
148148

149149
return inflection.pluralize(value) if pluralize else value
150150

151+
def parse_relation_name(value, format_type=None):
152+
if format_type is None:
153+
format_type = getattr(settings, 'JSON_API_PARSE_RELATION_KEYS', 'underscore')
154+
155+
singularize = getattr(settings, 'JSON_API_PLURALIZE_RELATION_TYPE', False)
156+
157+
if format_type:
158+
value = format_value(value, format_type)
159+
160+
return inflection.singularize(value) if singularize else value
161+
151162

152163
def get_related_resource_type(relation):
153164
if hasattr(relation, '_meta'):

0 commit comments

Comments
 (0)