Index: tests/regressiontests/defer_regress/tests.py
===================================================================
--- tests/regressiontests/defer_regress/tests.py	(revision 17014)
+++ tests/regressiontests/defer_regress/tests.py	(working copy)
@@ -9,7 +9,7 @@
 from django.test import TestCase
 
 from .models import (ResolveThis, Item, RelatedItem, Child, Leaf, Proxy,
-    SimpleItem, Feature)
+    SimpleItem, Feature, OneToOneItem)
 
 
 class DeferRegressionTest(TestCase):
@@ -110,6 +110,7 @@
                 Feature,
                 Item,
                 Leaf,
+                OneToOneItem,
                 Proxy,
                 RelatedItem,
                 ResolveThis,
@@ -141,6 +142,7 @@
                 "Leaf_Deferred_name_value",
                 "Leaf_Deferred_second_child_value",
                 "Leaf_Deferred_value",
+                "OneToOneItem",
                 "Proxy",
                 "RelatedItem",
                 "RelatedItem_Deferred_",
@@ -174,3 +176,9 @@
         qs = ResolveThis.objects.defer('num')
         self.assertEqual(1, qs.count())
         self.assertEqual('Foobar', qs[0].name)
+
+    def test_reverse_one_to_one_relations(self):
+        item = Item.objects.create(name="first", value=42)
+        OneToOneItem.objects.create(item=item, name="second")
+        self.assertEqual(len(Item.objects.all()), 1)
+        self.assertEqual(len(Item.objects.defer('one_to_one_item__name')), 1)
Index: tests/regressiontests/defer_regress/models.py
===================================================================
--- tests/regressiontests/defer_regress/models.py	(revision 17014)
+++ tests/regressiontests/defer_regress/models.py	(working copy)
@@ -47,3 +47,7 @@
 
 class Feature(models.Model):
     item = models.ForeignKey(SimpleItem)
+
+class OneToOneItem(models.Model):
+    item = models.OneToOneField(Item, related_name="one_to_one_item")
+    name = models.CharField(max_length=15)
Index: django/db/models/sql/query.py
===================================================================
--- django/db/models/sql/query.py	(revision 17014)
+++ django/db/models/sql/query.py	(working copy)
@@ -16,6 +16,7 @@
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
 from django.db.models.query_utils import InvalidQuery
+from django.db.models.related import RelatedObject
 from django.db.models.sql import aggregates as base_aggregates_module
 from django.db.models.sql.constants import *
 from django.db.models.sql.datastructures import EmptyResultSet, Empty, MultiJoin
@@ -580,12 +581,17 @@
             for name in parts[:-1]:
                 old_model = cur_model
                 source = opts.get_field_by_name(name)[0]
-                cur_model = opts.get_field_by_name(name)[0].rel.to
+                if isinstance(source, RelatedObject):
+                    cur_model = source.model
+                else:
+                    cur_model = source.rel.to
                 opts = cur_model._meta
                 # Even if we're "just passing through" this model, we must add
                 # both the current model's pk and the related reference field
                 # to the things we select.
-                must_include[old_model].add(source)
+                # (if it's not a reverse relation) to the things we select.
+                if not isinstance(source, RelatedObject):
+                    must_include[old_model].add(source)
                 add_to_dict(must_include, cur_model, opts.pk)
             field, model, _, _ = opts.get_field_by_name(parts[-1])
             if model is None:
@@ -630,7 +636,6 @@
             for model, values in seen.iteritems():
                 callback(target, model, values)
 
-
     def deferred_to_columns_cb(self, target, model, fields):
         """
         Callback used by deferred_to_columns(). The "target" parameter should
@@ -642,7 +647,6 @@
         for field in fields:
             target[table].add(field.column)
 
-
     def table_alias(self, table_name, create=False):
         """
         Returns a table alias for the given table_name and whether this is a
