docs: def get_data(self, query, fields_convert_map, encoding='utf-8', auto_convert=True,
                   include_hidden=False, header=None):
          """
          If convert=True, will convert field value
          """
          fields_convert_map = fields_convert_map or {}
          d = self.fields_convert_map.copy() 
          d.update(fields_convert_map)
  
          if isinstance(query, Select):
              query = do_(query)
          
          # def get_value(name, value, record):
          #     convert = d.get(name)
          #     if convert:
          #         value = convert(value, record)
          #     return safe_unicode(value, encoding)
          
          for record in query:
              self._cal_sum(record)
              row = []
              record = self._get_record(record)
              if self.before_record_render:
                  self.before_record_render(record)
              if isinstance(record, orm.Model):
                  model = record.__class__
              else:
                  model = None
                  
              for i, x in enumerate(self.table_info['fields_list']):
                  field = get_field(x['name'], model)
                  if not field:
                      field = {'name':x['name']}
                  else:
                      field = {'name':x['name'], 'prop':field}
                  if not include_hidden and x.get('hidden'):
                      continue
                  if isinstance(record, orm.Model):
                      v = make_view_field(field, record, fields_convert_map=d, 
                          auto_convert=auto_convert)
                  else:
                      v = make_view_field(field, record, fields_convert_map=d, 
                          auto_convert=auto_convert, value=record[x['name']])
                  value = v['display']
                  #value = safe_unicode(v['display'], encoding)
                  row.append(value)
                  
              if header:
                  ret = dict(zip(header, row))
              else:
                  ret = row
              yield ret
  
          total = self._get_sum()
          if total:
              row = []
              for x in total:
                  v = x
                  if isinstance(x, str):
                      v = safe_unicode(x, encoding)
                  row.append(v)
              if header:
                  ret = dict(zip(header, row))
              else:
                  ret = row
              yield ret