Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 3557)
+++ django/db/models/query.py	(working copy)
@@ -308,6 +308,9 @@
     def values(self, *fields):
         return self._clone(klass=ValuesQuerySet, _fields=fields)
 
+    def valuelist(self, *fields):
+        return self._clone(klass=ValueListQuerySet, _fields=fields)
+
     def dates(self, field_name, kind, order='ASC'):
         """
         Returns a list of datetime objects representing all available dates
@@ -509,23 +512,30 @@
         return select, " ".join(sql), params
 
 class ValuesQuerySet(QuerySet):
-    def iterator(self):
+    def get_columns(self):
+        if self._fields:
+            return [self.model._meta.get_field(f, many_to_many=False).column for f in self._fields]
+        else:
+            return [f.column for f in self.model._meta.fields]
+
+    def get_field_names(self):
+        return self._fields and self._fields or [f.attname for f in self.model._meta.fields]
+
+    def get_values_cursor(self):
         # select_related and select aren't supported in values().
         self._select_related = False
         self._select = {}
 
-        # self._fields is a list of field names to fetch.
-        if self._fields:
-            columns = [self.model._meta.get_field(f, many_to_many=False).column for f in self._fields]
-            field_names = self._fields
-        else: # Default to all fields.
-            columns = [f.column for f in self.model._meta.fields]
-            field_names = [f.attname for f in self.model._meta.fields]
-
+        columns = self.get_columns()
         cursor = connection.cursor()
         select, sql, params = self._get_sql_clause()
         select = ['%s.%s' % (backend.quote_name(self.model._meta.db_table), backend.quote_name(c)) for c in columns]
         cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params)
+        return cursor
+
+    def iterator(self):
+        cursor = self.get_values_cursor()
+        field_names = self.get_field_names()
         while 1:
             rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)
             if not rows:
@@ -538,6 +548,24 @@
         c._fields = self._fields[:]
         return c
 
+class ValueListQuerySet(ValuesQuerySet):
+    def iterator(self):
+        cursor = self.get_values_cursor()
+        while 1:
+            rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)
+            if not rows:
+                raise StopIteration
+            for row in rows:
+                if len(row) == 1:
+                    yield row[0]
+                else:
+                    yield tuple(row)
+
+    def _clone(self, klass=None, **kwargs):
+        c = super(ValueListQuerySet, self)._clone(klass, **kwargs)
+        c._fields = self._fields[:]
+        return c
+
 class DateQuerySet(QuerySet):
     def iterator(self):
         from django.db.backends.util import typecast_timestamp
Index: tests/modeltests/lookup/models.py
===================================================================
--- tests/modeltests/lookup/models.py	(revision 3557)
+++ tests/modeltests/lookup/models.py	(working copy)
@@ -124,6 +124,22 @@
 >>> list(Article.objects.filter(id=5).values()) == [{'id': 5, 'headline': 'Article 5', 'pub_date': datetime(2005, 8, 1, 9, 0)}]
 True
 
+# valuelist() returns a list of object field values instead of object instances.  Like
+# values(), you can specify the fields whose values you want to retrieve.
+>>> list(Article.objects.order_by('id').valuelist('id')) == [1, 2, 3, 4, 5, 6, 7]
+True
+
+# if you specify more than one field, a list of tuples of field values is returned
+>>> for t in Article.objects.order_by('id').valuelist('id', 'headline'):
+...     t
+(1, 'Article 1')
+(2, 'Article 2')
+(3, 'Article 3')
+(4, 'Article 4')
+(5, 'Article 5')
+(6, 'Article 6')
+(7, 'Article 7')
+
 # Every DateField and DateTimeField creates get_next_by_FOO() and
 # get_previous_by_FOO() methods.
 # In the case of identical date values, these methods will use the ID as a
