diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 82e7725..46a81ff 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -309,14 +309,14 @@ class ReverseSingleRelatedObjectDescriptor(six.with_metaclass(RenameRelatedObjec
         rel_obj_attr = self.field.get_foreign_related_value
         instance_attr = self.field.get_local_related_value
         instances_dict = dict((instance_attr(inst), inst) for inst in instances)
-        related_field = self.field.foreign_related_fields[0]
+        related_fields = self.field.foreign_related_fields
 
         # FIXME: This will need to be revisited when we introduce support for
         # composite fields. In the meantime we take this practical approach to
         # solve a regression on 1.6 when the reverse manager in hidden
         # (related_name ends with a '+'). Refs #21410.
-        if self.field.rel.is_hidden():
-            query = {'%s__in' % related_field.name: set(instance_attr(inst)[0] for inst in instances)}
+        if self.field.rel.is_hidden() or len(related_fields) == 1:
+            query = {'%s__in' % related_fields[0].name: set(inst_attrs[0] for inst_attrs in instances_dict.keys())}
         else:
             query = {'%s__in' % self.field.related_query_name(): instances}
 
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index 5dfca0f..3bd6ec3 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -996,3 +996,28 @@ class Ticket21410Tests(TestCase):
 
     def test_bug(self):
         list(Author2.objects.prefetch_related('first_book', 'favorite_books'))
+
+
+class Ticket21760Tests(TestCase):
+
+    def setUp(self):
+        for _ in xrange(3):
+            house = House.objects.create()
+            for _ in xrange(3):
+                Room.objects.create(house = house)
+
+    @override_settings(DEBUG=True)
+    def test_bug(self):
+        with self.assertNumQueries(2):
+            rooms = list(Room.objects.all().prefetch_related('house'))
+
+        house_ids = {
+            r.house_id for r in rooms
+            if r.house_id
+        }
+
+        prefetch_query = connection.queries[-1]['sql']
+        lookup_id_str = prefetch_query.split('- PARAMS = ')[1]
+        lookup_ids = set(map(int, lookup_id_str[1:-1].split(', ')))
+
+        self.assertEqual(house_ids, lookup_ids)
