diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 2800361..194fc9d 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -17,6 +17,7 @@ from django.db.models.constants import LOOKUP_SEP
 from django.db.models.aggregates import refs_aggregate
 from django.db.models.expressions import ExpressionNode
 from django.db.models.fields import FieldDoesNotExist
+from django.db.models.fields.related import ManyToManyRel
 from django.db.models.query_utils import Q
 from django.db.models.related import PathInfo
 from django.db.models.sql import aggregates as base_aggregates_module
@@ -1606,6 +1607,8 @@ class Query(object):
                 targets, final_alias, joins = self.trim_joins(targets, joins, path)
                 for target in targets:
                     self.select.append(SelectInfo((final_alias, target.column), target))
+                if isinstance(field.rel, ManyToManyRel) and 'id' not in field_names:
+                    field_names.append('id')
         except MultiJoin:
             raise FieldError("Invalid field name: '%s'" % name)
         except FieldError:
