          self.params['wkt'] = ''
  
          # If a string reaches here (via a validation error on another
          # field) then just reconstruct the Geometry.
          if value and isinstance(value, six.string_types):
              try:
                  value = GEOSGeometry(value)
              except (GEOSException, ValueError) as err:
                  logger.error("Error creating geometry from value '%s' (%s)", value, err)
                  value = None
 
</s> remove         if value and isinstance(value, six.string_types):
 </s> add         if value and isinstance(value, str): </s> remove                             if hasattr(field_value, '__iter__') and not isinstance(field_value, six.text_type):
 </s> add                             if hasattr(field_value, '__iter__') and not isinstance(field_value, str): </s> remove         elif f.geom_type == 'RASTER' and isinstance(value, six.string_types):
 </s> add         elif f.geom_type == 'RASTER' and isinstance(value, str): </s> remove         return six.text_type(value)
 </s> add         return str(value) </s> remove         elif desc[1] in (Database.STRING, Database.FIXED_CHAR,
                         Database.LONG_STRING):
            value = to_unicode(value)
 </s> add 
        if value and isinstance(value, str):
          self.params['wkt'] = ''
  
          # If a string reaches here (via a validation error on another
          # field) then just reconstruct the Geometry.
        if value and isinstance(value, str):
              try:
                  value = GEOSGeometry(value)
              except (GEOSException, ValueError) as err:
                  logger.error("Error creating geometry from value '%s' (%s)", value, err)
                  value = None
keep keep keep keep replace keep keep keep keep keep
 Refs #23919 -- Removed six.<various>_types usage

Thanks Tim Graham and Simon Charette for the reviews. 
django/contrib/gis/admin/widgets.py