                  f for f in opts._get_fields(reverse=False, include_parents=False)
                  if f.is_relation and f.related_model is not None
              )
              for f in fields_with_relations:
                  if not isinstance(f.remote_field.model, six.string_types):
                      related_objects_graph[f.remote_field.model._meta.concrete_model._meta].append(f)
  
          for model in all_models:
              # Set the relation_tree using the internal __dict__. In this way
              # we avoid calling the cached property. In attribute lookup,
 
</s> remove         if isinstance(self.unique, six.string_types):
 </s> add         if isinstance(self.unique, str): </s> remove         self.assertEqual(six.text_type(obj), 'foo')
 </s> add         self.assertEqual(str(obj), 'foo') </s> remove             six.text_type(f),
 </s> add             str(f), </s> remove         if not isinstance(query, six.string_types):
 </s> add         if not isinstance(query, 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):
                if not isinstance(f.remote_field.model, str):
                  f for f in opts._get_fields(reverse=False, include_parents=False)
                  if f.is_relation and f.related_model is not None
              )
              for f in fields_with_relations:
                if not isinstance(f.remote_field.model, str):
                      related_objects_graph[f.remote_field.model._meta.concrete_model._meta].append(f)
  
          for model in all_models:
              # Set the relation_tree using the internal __dict__. In this way
              # we avoid calling the cached property. In attribute lookup,
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/db/models/options.py