Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 7534)
+++ django/db/models/query.py	(working copy)
@@ -669,6 +669,22 @@
         if cached_row:
             rel_obj, index_end = cached_row
             setattr(obj, f.get_cache_name(), rel_obj)
+            
+    for f in klass._meta.get_all_related_objects():
+        if restricted and f.field.related_query_name() not in requested:
+            continue
+        if restricted:
+            next = requested[f.field.related_query_name()]
+        else:
+            next = None
+        cached_row = get_cached_row(f.model, row, index_end, max_depth, cur_depth+1, next)
+        if cached_row:
+            rel_obj, index_end = cached_row
+            if rel_obj.pk:
+                setattr(obj, f.field.get_cache_name(), rel_obj)
+            else:
+                setattr(obj, f.field.get_cache_name(), None)
+            
     return obj, index_end
 
 def delete_objects(seen_objs):
Index: django/db/models/sql/query.py
===================================================================
--- django/db/models/sql/query.py	(revision 7534)
+++ django/db/models/sql/query.py	(working copy)
@@ -908,6 +908,21 @@
             self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1,
                     used, next, restricted)
 
+        for f in opts.get_all_related_objects():
+            if restricted and f.field.related_query_name() not in requested:
+                continue
+            table = f.model._meta.db_table
+            alias = root_alias
+            alias = self.join((alias, table, 'id', f.field.column), exclusions=used, promote=True)
+            used.add(alias)
+            self.related_select_cols.extend([(alias, f2.column) for f2 in f.model._meta.fields])
+            self.related_select_fields.extend(f.model._meta.fields)
+            if restricted:
+                next = requested.get(f.name, {})
+            else:
+                next = False
+            self.fill_related_selections(f.model._meta, alias, cur_depth + 1, used, next, restricted)
+
     def add_filter(self, filter_expr, connector=AND, negate=False, trim=False,
             can_reuse=None):
         """
