                  v = ','.join(str(x) for x in v)
              elif isinstance(v, bool):
                  v = ('0', '1')[v]
              else:
                  v = six.text_type(v)
              items.append((k, v))
          params.update(dict(items))
      return params
  
  
 
</s> remove             u_params = {to_unicode(k): to_unicode(v) for k, v in params.items()}
 </s> add             u_params = {to_string(k): to_string(v) for k, v in params.items()} </s> remove             u_params = tuple(to_unicode(val) for val in params)
 </s> add             u_params = tuple(to_string(val) for val in params) </s> remove             return self.delimiter.join(six.text_type(self.base_field.prepare_value(v)) for v in value)
 </s> add             return self.delimiter.join(str(self.base_field.prepare_value(v)) for v in value) </s> remove     elif isinstance(value, six.integer_types + (decimal.Decimal, float)):
 </s> add     elif isinstance(value, (int, decimal.Decimal, float)): </s> remove         return six.text_type("QUERY = %r - PARAMS = %r") % (sql, u_params)
 </s> add         return "QUERY = %r - PARAMS = %r" % (sql, u_params)
                v = str(v)
                  v = ','.join(str(x) for x in v)
              elif isinstance(v, bool):
                  v = ('0', '1')[v]
              else:
                v = str(v)
              items.append((k, v))
          params.update(dict(items))
      return params
  
  
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/admin/widgets.py