Index: django/db/backends/postgresql/base.py
===================================================================
--- django/db/backends/postgresql/base.py	(revision 4504)
+++ django/db/backends/postgresql/base.py	(working copy)
@@ -40,11 +40,11 @@
         self.charset = charset
 
     def execute(self, sql, params=()):
-        return self.cursor.execute(sql, [smart_basestring(p, self.charset) for p in params])
+        return self.cursor.execute(smart_basestring(sql, self.charset), [smart_basestring(p, self.charset) for p in params])
 
     def executemany(self, sql, param_list):
         new_param_list = [tuple([smart_basestring(p, self.charset) for p in params]) for params in param_list]
-        return self.cursor.executemany(sql, new_param_list)
+        return self.cursor.executemany(smart_basestring(sql, self.charset), new_param_list)
 
     def __getattr__(self, attr):
         if self.__dict__.has_key(attr):
Index: tests/modeltests/many_to_one/models.py
===================================================================
--- tests/modeltests/many_to_one/models.py	(revision 4504)
+++ tests/modeltests/many_to_one/models.py	(working copy)
@@ -154,6 +154,10 @@
 >>> Article.objects.filter(reporter__first_name__exact='John').extra(where=["many_to_one_article__reporter.last_name='Smith'"])
 [<Article: John's second story>, <Article: This is a test>]
 
+# And should work fine with the unicode that comes out of newforms.Form.clean_data
+>>> Article.objects.filter(reporter__first_name__exact='John').extra(where=["many_to_one_article__reporter.last_name='%s'" % u'Smith'])
+[<Article: John's second story>, <Article: This is a test>]
+
 # Find all Articles for the Reporter whose ID is 1.
 # Use direct ID check, pk check, and object comparison 
 >>> Article.objects.filter(reporter__id__exact=1)
