code: def get_field_type(self, connection, table_name, row):
          
          field_params = {}
          field_notes = []
  
          try:
              field_type = connection.introspection.get_field_type(row[1], row)
          except KeyError:
              field_type = 'TextField'
              field_notes.append('This field type is a guess.')
  
          # This is a hook for DATA_TYPES_REVERSE to return a tuple of
          # (field_type, field_params_dict).
          if type(field_type) is tuple:
              field_type, new_params = field_type
              field_params.update(new_params)
  
          # Add max_length for all CharFields.
          if field_type == 'CharField' and row[3]:
              field_params['max_length'] = row[3]
  
          if field_type == 'DecimalField':
              field_params['max_digits'] = row[4]
              field_params['decimal_places'] = row[5]
  
          return field_type, field_params, field_notes
docs: Given the database connection, the table name, and the cursor row
          description, this routine will return the given field type name, as
          well as any additional keyword parameters and notes for the field.