diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py
index aeacd234a3..90370bd978 100644
--- a/django/contrib/admin/helpers.py
+++ b/django/contrib/admin/helpers.py
@@ -94,7 +94,7 @@ class Fieldset(object):
 class Fieldline(object):
     def __init__(self, form, field, readonly_fields=None, model_admin=None):
         self.form = form # A django.forms.Form instance
-        if not hasattr(field, "__iter__"):
+        if not hasattr(field, "__iter__") or isinstance(field, six.text_type):
             self.fields = [field]
         else:
             self.fields = field
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index 348ff1dada..a1fff6f9bb 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -98,7 +98,7 @@ def Deserializer(object_list, **options):
             if field.rel and isinstance(field.rel, models.ManyToManyRel):
                 if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
                     def m2m_convert(value):
-                        if hasattr(value, '__iter__'):
+                        if hasattr(value, '__iter__') and not isinstance(value, six.text_type):
                             return field.rel.to._default_manager.db_manager(db).get_by_natural_key(*value).pk
                         else:
                             return smart_text(field.rel.to._meta.pk.to_python(value))
@@ -110,7 +110,7 @@ def Deserializer(object_list, **options):
             elif field.rel and isinstance(field.rel, models.ManyToOneRel):
                 if field_value is not None:
                     if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
-                        if hasattr(field_value, '__iter__'):
+                        if hasattr(field_value, '__iter__') and not isinstance(field_value, six.text_type):
                             obj = field.rel.to._default_manager.db_manager(db).get_by_natural_key(*field_value)
                             value = getattr(obj, field.rel.field_name)
                             # If this is a natural foreign key to an object that
diff --git a/django/forms/models.py b/django/forms/models.py
index 80d2a6536f..0b07d31d9a 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -1035,6 +1035,6 @@ class ModelMultipleChoiceField(ModelChoiceField):
         return qs
 
     def prepare_value(self, value):
-        if hasattr(value, '__iter__'):
+        if hasattr(value, '__iter__') and not isinstance(value, six.text_type):
             return [super(ModelMultipleChoiceField, self).prepare_value(v) for v in value]
         return super(ModelMultipleChoiceField, self).prepare_value(value)
diff --git a/django/http/__init__.py b/django/http/__init__.py
index d559fdf7c6..cc138917b9 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -656,7 +656,7 @@ class HttpResponse(object):
         return b''.join([smart_bytes(e, self._charset) for e in self._container])
 
     def _set_content(self, value):
-        if hasattr(value, '__iter__'):
+        if hasattr(value, '__iter__') and not isinstance(value, (bytes, six.text_type)):
             self._container = value
             self._base_content_is_iter = True
         else: