@@ -319,6 +319,20 @@ def extract_included(fields, resource, resource_instance, included_resources):
319
319
320
320
return utils .format_keys (included_data )
321
321
322
+ @staticmethod
323
+ def extract_meta (serializer , resource ):
324
+ if hasattr (serializer , 'child' ):
325
+ meta = getattr (serializer .child , 'Meta' , None )
326
+ else :
327
+ meta = getattr (serializer , 'Meta' , None )
328
+ meta_fields = getattr (meta , 'meta_fields' , {})
329
+ data = OrderedDict ()
330
+ for field_name in meta_fields :
331
+ data .update ({
332
+ field_name : resource .get (field_name )
333
+ })
334
+ return data
335
+
322
336
@staticmethod
323
337
def build_json_resource_obj (fields , resource , resource_instance , resource_name ):
324
338
resource_data = [
@@ -409,8 +423,13 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
409
423
for position in range (len (serializer_data )):
410
424
resource = serializer_data [position ] # Get current resource
411
425
resource_instance = resource_serializer .instance [position ] # Get current instance
412
- json_api_data .append (
413
- self .build_json_resource_obj (fields , resource , resource_instance , resource_name ))
426
+
427
+ json_resource_obj = self .build_json_resource_obj (fields , resource , resource_instance , resource_name )
428
+ meta = self .extract_meta (resource_serializer , resource )
429
+ if meta :
430
+ json_resource_obj .update ({'meta' : utils .format_keys (meta )})
431
+ json_api_data .append (json_resource_obj )
432
+
414
433
included = self .extract_included (fields , resource , resource_instance , included_resources )
415
434
if included :
416
435
json_api_included .extend (included )
@@ -420,6 +439,11 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
420
439
fields = utils .get_serializer_fields (data .serializer )
421
440
resource_instance = data .serializer .instance
422
441
json_api_data = self .build_json_resource_obj (fields , data , resource_instance , resource_name )
442
+
443
+ meta = self .extract_meta (data .serializer , data )
444
+ if meta :
445
+ json_api_data .update ({'meta' : utils .format_keys (meta )})
446
+
423
447
included = self .extract_included (fields , data , resource_instance , included_resources )
424
448
if included :
425
449
json_api_included .extend (included )
@@ -453,7 +477,8 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
453
477
render_data ['included' ] = sorted (unique_compound_documents , key = lambda item : (item ['type' ], item ['id' ]))
454
478
455
479
if isinstance (data , dict ) and data .get ('meta' ):
456
- render_data ['meta' ] = data .get ('meta' )
480
+ # add top level meta (such as pagination data)
481
+ render_data .update ({'meta' : utils .format_keys (data .get ('meta' ))})
457
482
458
483
return super (JSONRenderer , self ).render (
459
484
render_data , accepted_media_type , renderer_context
0 commit comments