diff -r a729ba90ca04 django/core/management/validation.py
--- a/django/core/management/validation.py      Thu Sep 13 17:42:30 2007 -0500
+++ b/django/core/management/validation.py      Fri Sep 14 01:27:20 2007 -0400
@@ -1,4 +1,5 @@ import sys
 import sys
+import types
 from django.core.management.color import color_style

 class ModelErrorCollection:
@@ -11,6 +12,13 @@ class ModelErrorCollection:
         self.errors.append((context, error))
         self.outfile.write(self.style.ERROR("%s: %s\n" % (context, error)))

+def _is_iterable(x):
+    try:
+        iter(x)
+    except TypeError:
+        return False
+    else:
+        return True
 def get_validation_errors(outfile, app=None):
     """
     Validates all models that are part of the specified app. If no app name is provided,
@@ -51,7 +59,8 @@ def get_validation_errors(outfile, app=N
             if f.prepopulate_from is not None and type(f.prepopulate_from) not in (list, tuple):
                 e.add(opts, '"%s": prepopulate_from should be a list or tuple.' % f.name)
             if f.choices:
-                if not hasattr(f.choices, '__iter__'):
+                if isinstance(f.choices, types.StringTypes) or \
+                       not _is_iterable(f.choices):
                     e.add(opts, '"%s": "choices" should be iterable (e.g., a tuple or list).' % f.name)
                 else:
                     for c in f.choices:
--- a/django/http/__init__.py   Thu Sep 13 17:42:30 2007 -0500
+++ b/django/http/__init__.py   Fri Sep 14 01:27:20 2007 -0400
@@ -289,7 +289,7 @@ class HttpResponse(object):
     content = property(_get_content, _set_content)

     def __iter__(self):
-        self._iterator = self._container.__iter__()
+        self._iterator = iter(self._container)
         return self

     def next(self):
diff -r a729ba90ca04 django/test/client.py
--- a/django/test/client.py     Thu Sep 13 17:42:30 2007 -0500
+++ b/django/test/client.py     Fri Sep 14 01:27:20 2007 -0400
@@ -1,5 +1,6 @@ import datetime
 import datetime
 import sys
+import types
 from cStringIO import StringIO
 from urlparse import urlparse
 from django.conf import settings
@@ -74,21 +75,28 @@ def encode_multipart(boundary, data):
                 '',
                 value.read()
             ])
-        elif hasattr(value, '__iter__'):
-            for item in value:
+        else:
+            try:
+                iter(value)
+            except:
+                iterable = False
+            else:
+                iterable = True
+            if iterable and not isinstance(value, types.StringTypes):
+                for item in value:
+                    lines.extend([
+                        '--' + boundary,
+                        'Content-Disposition: form-data; name="%s"' % to_str(key),
+                        '',
+                        to_str(item)
+                    ])
+            else:
                 lines.extend([
                     '--' + boundary,
                     'Content-Disposition: form-data; name="%s"' % to_str(key),
                     '',
-                    to_str(item)
+                    to_str(value)
                 ])
-        else:
-            lines.extend([
-                '--' + boundary,
-                'Content-Disposition: form-data; name="%s"' % to_str(key),
-                '',
-                to_str(value)
-            ])

     lines.extend([
         '--' + boundary + '--',
