          Given the feature keyword arguments (from `feature_kwargs`) this routine
          will construct and return the uniqueness keyword arguments -- a subset
          of the feature kwargs.
          """
          if isinstance(self.unique, six.string_types):
              return {self.unique: kwargs[self.unique]}
          else:
              return {fld: kwargs[fld] for fld in self.unique}
  
      # #### Verification routines used in constructing model keyword arguments. ####
 
</s> remove         if isinstance(data, six.string_types):
 </s> add         if isinstance(data, str): </s> remove         elif isinstance(unique, six.string_types):
 </s> add         elif isinstance(unique, str): </s> remove         if not isinstance(target, six.string_types) or not isinstance(index, int):
 </s> add         if not isinstance(target, str) or not isinstance(index, int): </s> remove                 if isinstance(field_value, six.string_types):
 </s> add                 if isinstance(field_value, str): </s> remove         if isinstance(index, six.integer_types):
 </s> add         if isinstance(index, int):
        if isinstance(self.unique, str):
          Given the feature keyword arguments (from `feature_kwargs`) this routine
          will construct and return the uniqueness keyword arguments -- a subset
          of the feature kwargs.
          """
        if isinstance(self.unique, str):
              return {self.unique: kwargs[self.unique]}
          else:
              return {fld: kwargs[fld] for fld in self.unique}
  
      # #### Verification routines used in constructing model keyword arguments. ####
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/utils/layermapping.py