Skip to content

Commit e20ea39

Browse files
committed
Add option to specify default included resources
Let's provide an extra JSONAPIMeta configuration option that specifies resources to be listed in the 'included' section of the response. These resources shall be included even if they're not explicitly mentioned in the 'include' request parameter.
1 parent 54f1dcd commit e20ea39

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

rest_framework_json_api/renderers.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,6 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
415415
if resource_name == 'errors':
416416
return self.render_errors(data, accepted_media_type, renderer_context)
417417

418-
include_resources_param = request.query_params.get('include') if request else None
419-
if include_resources_param:
420-
included_resources = include_resources_param.split(',')
421-
else:
422-
included_resources = list()
423-
424418
json_api_data = data
425419
json_api_included = list()
426420
# initialize json_api_meta with pagination meta or an empty dict
@@ -433,6 +427,13 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
433427

434428
serializer = getattr(serializer_data, 'serializer', None)
435429

430+
# Build a list of included resources
431+
included_resources = utils.get_default_included_resources_from_serializer(serializer)
432+
include_resources_param = request.query_params.get('include') if request else None
433+
if include_resources_param:
434+
extra = filter(lambda r: r not in included_resources, include_resources_param.split(','))
435+
included_resources.extend(extra)
436+
436437
if serializer is not None:
437438

438439
# Get the serializer fields

rest_framework_json_api/utils.py

+7
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,13 @@ def get_resource_type_from_serializer(serializer):
232232
return get_resource_type_from_model(serializer.Meta.model)
233233

234234

235+
def get_default_included_resources_from_serializer(serializer):
236+
try:
237+
return list(serializer.JSONAPIMeta.included_resources)
238+
except AttributeError:
239+
return []
240+
241+
235242
def get_included_serializers(serializer):
236243
included_serializers = copy.copy(getattr(serializer, 'included_serializers', dict()))
237244

0 commit comments

Comments
 (0)