docs: def get_json_response_object(self, datatable):
          """
          Returns the JSON-compatible dictionary that will be serialized for an AJAX response.
  
          The value names are in the form "s~" for strings, "i~" for integers, and "a~" for arrays,
          if you're unfamiliar with the old C-style jargon used in dataTables.js.  "aa~" means
          "array of arrays".  In some instances, the author uses "ao~" for "array of objects", an
          object being a javascript dictionary.
          """
  
          # Ensure the object list is calculated.
          # Calling get_records() will do this implicitly, but we want simultaneous access to the
          # 'total_initial_record_count', and 'unpaged_record_count' values.
          datatable.populate_records()
  
          draw = getattr(self.request, self.request.method).get('draw', None)
          if draw is not None:
              draw = escape_uri_path(draw)
          response_data = {
              'draw': draw,
              'recordsFiltered': datatable.unpaged_record_count,
              'recordsTotal': datatable.total_initial_record_count,
              'data': [dict(record, **{
                  'DT_RowId': record.pop('pk'),
                  'DT_RowData': record.pop('_extra_data'),
              }) for record in datatable.get_records()],
          }
          return response_data