      len_defaults = len(defaults) if defaults else 0
      return len_args <= len_defaults
  
  
  def get_component(obj, attr_name):
      """
      Given an object, and an attribute name,
      return that attribute on the object.
      """
 
</s> remove         elif hasattr(value, '__iter__') and not isinstance(value, (dict, six.string_types)):
 </s> add         elif (is_non_str_iterable(value) and
              not isinstance(value, (dict, six.string_types))):
if six.PY3:
    def is_non_str_iterable(obj):
        if (isinstance(obj, str) or
            (isinstance(obj, Promise) and obj._delegate_text)):
            return False
        return hasattr(obj, '__iter__')
else:
    def is_non_str_iterable(obj):
        return hasattr(obj, '__iter__')
      len_defaults = len(defaults) if defaults else 0
      return len_args <= len_defaults
  
if six.PY3:
    def is_non_str_iterable(obj):
        if (isinstance(obj, str) or
            (isinstance(obj, Promise) and obj._delegate_text)):
            return False
        return hasattr(obj, '__iter__')
else:
    def is_non_str_iterable(obj):
        return hasattr(obj, '__iter__')
  
  def get_component(obj, attr_name):
      """
      Given an object, and an attribute name,
      return that attribute on the object.
      """
keep keep add keep keep keep keep keep keep
 Handle Python 3 strings and lazy strings. 
rest_framework/fields.py