Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 5132)
+++ django/db/models/query.py	(revision 5133)
@@ -636,8 +636,12 @@
     if table_prefix.endswith('.'):
         table_prefix = backend.quote_name(table_prefix[:-1])+'.'
     field_name = backend.quote_name(field_name)
+    # Grab mapping for table and column name to do formatting
+    column_map = '%s%s' % (table_prefix, field_name)
+    if hasattr(backend, 'COLUMN_MAPPING') and backend.COLUMN_MAPPING.has_key(lookup_type):
+        column_map = backend.COLUMN_MAPPING[lookup_type] % column_map
     try:
-        return '%s%s %s' % (table_prefix, field_name, (backend.OPERATOR_MAPPING[lookup_type] % '%s'))
+        return '%s %s' % (column_map, (backend.OPERATOR_MAPPING[lookup_type] % '%s'))
     except KeyError:
         pass
     if lookup_type == 'in':
Index: django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/db/backends/postgresql_psycopg2/base.py	(revision 5132)
+++ django/db/backends/postgresql_psycopg2/base.py	(revision 5133)
@@ -120,9 +120,14 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+# Create a map for to do column functions
+COLUMN_MAPPING = {
+    'iexact': 'LOWER(%s)',
+    }
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
-    'iexact': 'ILIKE %s',
+    'iexact': '= LOWER(%s)',
     'contains': 'LIKE %s',
     'icontains': 'ILIKE %s',
     'gt': '> %s',
