diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 8de3112..f429af5 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -222,7 +222,7 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
         Returns a QuerySet of all model instances that can be edited by the
         admin site. This is used by changelist_view.
         """
-        qs = self.model._default_manager.get_query_set()
+        qs = self.model._default_manager.get_queryset()
         # TODO: this should be handled by some parameter to the ChangeList.
         ordering = self.get_ordering(request)
         if ordering:
@@ -1187,7 +1187,7 @@ class ModelAdmin(BaseModelAdmin):
         if (actions and request.method == 'POST' and
                 'index' in request.POST and '_save' not in request.POST):
             if selected:
-                response = self.response_action(request, queryset=cl.get_query_set(request))
+                response = self.response_action(request, queryset=cl.get_queryset(request))
                 if response:
                     return response
                 else:
@@ -1203,7 +1203,7 @@ class ModelAdmin(BaseModelAdmin):
                 helpers.ACTION_CHECKBOX_NAME in request.POST and
                 'index' not in request.POST and '_save' not in request.POST):
             if selected:
-                response = self.response_action(request, queryset=cl.get_query_set(request))
+                response = self.response_action(request, queryset=cl.get_queryset(request))
                 if response:
                     return response
                 else:
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 4b296b3..c45d5d8 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -6,7 +6,9 @@ from django.core.paginator import InvalidPage
 from django.core.urlresolvers import reverse
 from django.db import models
 from django.db.models.fields import FieldDoesNotExist
+from django.utils import six
 from django.utils.datastructures import SortedDict
+from django.utils.deprecation import DeprecatedGetQuerySet
 from django.utils.encoding import force_str, force_text
 from django.utils.translation import ugettext, ugettext_lazy
 from django.utils.http import urlencode
@@ -33,7 +35,7 @@ IGNORED_PARAMS = (
 EMPTY_CHANGELIST_VALUE = ugettext_lazy('(None)')
 
 
-class ChangeList(object):
+class ChangeList(six.with_metaclass(DeprecatedGetQuerySet)):
     def __init__(self, request, model, list_display, list_display_links,
             list_filter, date_hierarchy, search_fields, list_select_related,
             list_per_page, list_max_show_all, list_editable, model_admin):
@@ -70,7 +72,7 @@ class ChangeList(object):
         else:
             self.list_editable = list_editable
         self.query = request.GET.get(SEARCH_VAR, '')
-        self.query_set = self.get_query_set(request)
+        self.query_set = self.get_queryset(request)
         self.get_results(request)
         if self.is_popup:
             title = ugettext('Select %s')
@@ -297,7 +299,7 @@ class ChangeList(object):
                 ordering_fields[idx] = 'desc' if pfx == '-' else 'asc'
         return ordering_fields
 
-    def get_query_set(self, request):
+    def get_queryset(self, request):
         # First, we collect all the declared list filters.
         (self.filter_specs, self.has_filters, remaining_lookup_params,
          use_distinct) = self.get_filters(request)
diff --git a/django/contrib/comments/managers.py b/django/contrib/comments/managers.py
index bc0fc5f..6562004 100644
--- a/django/contrib/comments/managers.py
+++ b/django/contrib/comments/managers.py
@@ -8,7 +8,7 @@ class CommentManager(models.Manager):
         """
         QuerySet for all comments currently in the moderation queue.
         """
-        return self.get_query_set().filter(is_public=False, is_removed=False)
+        return self.get_queryset().filter(is_public=False, is_removed=False)
 
     def for_model(self, model):
         """
@@ -16,7 +16,7 @@ class CommentManager(models.Manager):
         a class).
         """
         ct = ContentType.objects.get_for_model(model)
-        qs = self.get_query_set().filter(content_type=ct)
+        qs = self.get_queryset().filter(content_type=ct)
         if isinstance(model, models.Model):
             qs = qs.filter(object_pk=force_text(model._get_pk_val()))
         return qs
diff --git a/django/contrib/comments/templatetags/comments.py b/django/contrib/comments/templatetags/comments.py
index 4d4eb23..900c08f 100644
--- a/django/contrib/comments/templatetags/comments.py
+++ b/django/contrib/comments/templatetags/comments.py
@@ -3,11 +3,14 @@ from django.template.loader import render_to_string
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from django.contrib import comments
+from django.utils import six
+from django.utils.deprecation import DeprecatedGetQuerySet
 from django.utils.encoding import smart_text
 
 register = template.Library()
 
-class BaseCommentNode(template.Node):
+
+class BaseCommentNode(six.with_metaclass(DeprecatedGetQuerySet, template.Node)):
     """
     Base helper class (abstract) for handling the get_comment_* template tags.
     Looks a bit strange, but the subclasses below should make this a bit more
@@ -64,11 +67,11 @@ class BaseCommentNode(template.Node):
         self.comment = comment
 
     def render(self, context):
-        qs = self.get_query_set(context)
+        qs = self.get_queryset(context)
         context[self.as_varname] = self.get_context_value_from_queryset(context, qs)
         return ''
 
-    def get_query_set(self, context):
+    def get_queryset(self, context):
         ctype, object_pk = self.get_target_ctype_pk(context)
         if not object_pk:
             return self.comment_model.objects.none()
@@ -205,7 +208,7 @@ class RenderCommentListNode(CommentListNode):
                 "comments/%s/list.html" % ctype.app_label,
                 "comments/list.html"
             ]
-            qs = self.get_query_set(context)
+            qs = self.get_queryset(context)
             context.push()
             liststr = render_to_string(template_search_list, {
                 "comment_list" : self.get_context_value_from_queryset(context, qs)
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index d849d16..bef19dc 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -316,12 +316,12 @@ def create_generic_related_manager(superclass):
                 '%s__exact' % object_id_field_name: instance._get_pk_val(),
             }
 
-        def get_query_set(self):
+        def get_queryset(self):
             try:
                 return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
             except (AttributeError, KeyError):
                 db = self._db or router.db_for_read(self.model, instance=self.instance)
-                return super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**self.core_filters)
+                return super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**self.core_filters)
 
         def get_prefetch_query_set(self, instances):
             db = self._db or router.db_for_read(self.model, instance=instances[0])
@@ -330,7 +330,7 @@ def create_generic_related_manager(superclass):
                 '%s__in' % self.object_id_field_name:
                     set(obj._get_pk_val() for obj in instances)
                 }
-            qs = super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**query)
+            qs = super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**query)
             # We (possibly) need to convert object IDs to the type of the
             # instances' PK in order to match up instances:
             object_id_converter = instances[0]._meta.pk.to_python
diff --git a/django/contrib/gis/db/models/manager.py b/django/contrib/gis/db/models/manager.py
index 61fb821..bbcbb57 100644
--- a/django/contrib/gis/db/models/manager.py
+++ b/django/contrib/gis/db/models/manager.py
@@ -1,6 +1,7 @@
 from django.db.models.manager import Manager
 from django.contrib.gis.db.models.query import GeoQuerySet
 
+
 class GeoManager(Manager):
     "Overrides Manager to return Geographic QuerySets."
 
@@ -9,95 +10,95 @@ class GeoManager(Manager):
     # properly.
     use_for_related_fields = True
 
-    def get_query_set(self):
+    def get_queryset(self):
         return GeoQuerySet(self.model, using=self._db)
 
     def area(self, *args, **kwargs):
-        return self.get_query_set().area(*args, **kwargs)
+        return self.get_queryset().area(*args, **kwargs)
 
     def centroid(self, *args, **kwargs):
-        return self.get_query_set().centroid(*args, **kwargs)
+        return self.get_queryset().centroid(*args, **kwargs)
 
     def collect(self, *args, **kwargs):
-        return self.get_query_set().collect(*args, **kwargs)
+        return self.get_queryset().collect(*args, **kwargs)
 
     def difference(self, *args, **kwargs):
-        return self.get_query_set().difference(*args, **kwargs)
+        return self.get_queryset().difference(*args, **kwargs)
 
     def distance(self, *args, **kwargs):
-        return self.get_query_set().distance(*args, **kwargs)
+        return self.get_queryset().distance(*args, **kwargs)
 
     def envelope(self, *args, **kwargs):
-        return self.get_query_set().envelope(*args, **kwargs)
+        return self.get_queryset().envelope(*args, **kwargs)
 
     def extent(self, *args, **kwargs):
-        return self.get_query_set().extent(*args, **kwargs)
+        return self.get_queryset().extent(*args, **kwargs)
 
     def extent3d(self, *args, **kwargs):
-        return self.get_query_set().extent3d(*args, **kwargs)
+        return self.get_queryset().extent3d(*args, **kwargs)
 
     def force_rhr(self, *args, **kwargs):
-        return self.get_query_set().force_rhr(*args, **kwargs)
+        return self.get_queryset().force_rhr(*args, **kwargs)
 
     def geohash(self, *args, **kwargs):
-        return self.get_query_set().geohash(*args, **kwargs)
+        return self.get_queryset().geohash(*args, **kwargs)
 
     def geojson(self, *args, **kwargs):
-        return self.get_query_set().geojson(*args, **kwargs)
+        return self.get_queryset().geojson(*args, **kwargs)
 
     def gml(self, *args, **kwargs):
-        return self.get_query_set().gml(*args, **kwargs)
+        return self.get_queryset().gml(*args, **kwargs)
 
     def intersection(self, *args, **kwargs):
-        return self.get_query_set().intersection(*args, **kwargs)
+        return self.get_queryset().intersection(*args, **kwargs)
 
     def kml(self, *args, **kwargs):
-        return self.get_query_set().kml(*args, **kwargs)
+        return self.get_queryset().kml(*args, **kwargs)
 
     def length(self, *args, **kwargs):
-        return self.get_query_set().length(*args, **kwargs)
+        return self.get_queryset().length(*args, **kwargs)
 
     def make_line(self, *args, **kwargs):
-        return self.get_query_set().make_line(*args, **kwargs)
+        return self.get_queryset().make_line(*args, **kwargs)
 
     def mem_size(self, *args, **kwargs):
-        return self.get_query_set().mem_size(*args, **kwargs)
+        return self.get_queryset().mem_size(*args, **kwargs)
 
     def num_geom(self, *args, **kwargs):
-        return self.get_query_set().num_geom(*args, **kwargs)
+        return self.get_queryset().num_geom(*args, **kwargs)
 
     def num_points(self, *args, **kwargs):
-        return self.get_query_set().num_points(*args, **kwargs)
+        return self.get_queryset().num_points(*args, **kwargs)
 
     def perimeter(self, *args, **kwargs):
-        return self.get_query_set().perimeter(*args, **kwargs)
+        return self.get_queryset().perimeter(*args, **kwargs)
 
     def point_on_surface(self, *args, **kwargs):
-        return self.get_query_set().point_on_surface(*args, **kwargs)
+        return self.get_queryset().point_on_surface(*args, **kwargs)
 
     def reverse_geom(self, *args, **kwargs):
-        return self.get_query_set().reverse_geom(*args, **kwargs)
+        return self.get_queryset().reverse_geom(*args, **kwargs)
 
     def scale(self, *args, **kwargs):
-        return self.get_query_set().scale(*args, **kwargs)
+        return self.get_queryset().scale(*args, **kwargs)
 
     def snap_to_grid(self, *args, **kwargs):
-        return self.get_query_set().snap_to_grid(*args, **kwargs)
+        return self.get_queryset().snap_to_grid(*args, **kwargs)
 
     def svg(self, *args, **kwargs):
-        return self.get_query_set().svg(*args, **kwargs)
+        return self.get_queryset().svg(*args, **kwargs)
 
     def sym_difference(self, *args, **kwargs):
-        return self.get_query_set().sym_difference(*args, **kwargs)
+        return self.get_queryset().sym_difference(*args, **kwargs)
 
     def transform(self, *args, **kwargs):
-        return self.get_query_set().transform(*args, **kwargs)
+        return self.get_queryset().transform(*args, **kwargs)
 
     def translate(self, *args, **kwargs):
-        return self.get_query_set().translate(*args, **kwargs)
+        return self.get_queryset().translate(*args, **kwargs)
 
     def union(self, *args, **kwargs):
-        return self.get_query_set().union(*args, **kwargs)
+        return self.get_queryset().union(*args, **kwargs)
 
     def unionagg(self, *args, **kwargs):
-        return self.get_query_set().unionagg(*args, **kwargs)
+        return self.get_queryset().unionagg(*args, **kwargs)
diff --git a/django/contrib/sites/managers.py b/django/contrib/sites/managers.py
index 3df485a..449e081 100644
--- a/django/contrib/sites/managers.py
+++ b/django/contrib/sites/managers.py
@@ -2,6 +2,7 @@ from django.conf import settings
 from django.db import models
 from django.db.models.fields import FieldDoesNotExist
 
+
 class CurrentSiteManager(models.Manager):
     "Use this to limit objects to those associated with the current site."
     def __init__(self, field_name=None):
@@ -35,7 +36,7 @@ class CurrentSiteManager(models.Manager):
                     (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
         self.__is_validated = True
     
-    def get_query_set(self):
+    def get_queryset(self):
         if not self.__is_validated:
             self._validate_field_name()
-        return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
+        return super(CurrentSiteManager, self).get_queryset().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index bd2e288..7f2e81c 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1,5 +1,7 @@
 from operator import attrgetter
 
+from django import forms
+from django.core import exceptions
 from django.db import connection, router
 from django.db.backends import util
 from django.db.models import signals, get_model
@@ -11,10 +13,10 @@ from django.db.models.query_utils import QueryWrapper
 from django.db.models.deletion import CASCADE
 from django.utils.encoding import smart_text
 from django.utils import six
+from django.utils.deprecation import DeprecatedGetQuerySet
 from django.utils.translation import ugettext_lazy as _, string_concat
 from django.utils.functional import curry, cached_property
-from django.core import exceptions
-from django import forms
+
 
 RECURSIVE_RELATIONSHIP_CONSTANT = 'self'
 
@@ -225,7 +227,7 @@ class RelatedField(object):
         return self.rel.related_name or self.opts.model_name
 
 
-class SingleRelatedObjectDescriptor(object):
+class SingleRelatedObjectDescriptor(six.with_metaclass(DeprecatedGetQuerySet)):
     # This class provides the functionality that makes the related-object
     # managers available as attributes on a model class, for fields that have
     # a single "remote" value, on the class pointed to by a related field.
@@ -238,7 +240,7 @@ class SingleRelatedObjectDescriptor(object):
     def is_cached(self, instance):
         return hasattr(instance, self.cache_name)
 
-    def get_query_set(self, **db_hints):
+    def get_queryset(self, **db_hints):
         db = router.db_for_read(self.related.model, **db_hints)
         return self.related.model._base_manager.using(db)
 
@@ -247,7 +249,7 @@ class SingleRelatedObjectDescriptor(object):
         instance_attr = lambda obj: obj._get_pk_val()
         instances_dict = dict((instance_attr(inst), inst) for inst in instances)
         params = {'%s__pk__in' % self.related.field.name: list(instances_dict)}
-        qs = self.get_query_set(instance=instances[0]).filter(**params)
+        qs = self.get_queryset(instance=instances[0]).filter(**params)
         # Since we're going to assign directly in the cache,
         # we must manage the reverse relation cache manually.
         rel_obj_cache_name = self.related.field.get_cache_name()
@@ -268,7 +270,7 @@ class SingleRelatedObjectDescriptor(object):
             else:
                 params = {'%s__pk' % self.related.field.name: related_pk}
                 try:
-                    rel_obj = self.get_query_set(instance=instance).get(**params)
+                    rel_obj = self.get_queryset(instance=instance).get(**params)
                 except self.related.model.DoesNotExist:
                     rel_obj = None
                 else:
@@ -321,7 +323,7 @@ class SingleRelatedObjectDescriptor(object):
         setattr(value, self.related.field.get_cache_name(), instance)
 
 
-class ReverseSingleRelatedObjectDescriptor(object):
+class ReverseSingleRelatedObjectDescriptor(six.with_metaclass(DeprecatedGetQuerySet)):
     # This class provides the functionality that makes the related-object
     # managers available as attributes on a model class, for fields that have
     # a single "remote" value, on the class that defines the related field.
@@ -334,7 +336,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
     def is_cached(self, instance):
         return hasattr(instance, self.cache_name)
 
-    def get_query_set(self, **db_hints):
+    def get_queryset(self, **db_hints):
         db = router.db_for_read(self.field.rel.to, **db_hints)
         rel_mgr = self.field.rel.to._default_manager
         # If the related manager indicates that it should be used for
@@ -353,7 +355,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
             params = {'%s__pk__in' % self.field.rel.field_name: list(instances_dict)}
         else:
             params = {'%s__in' % self.field.rel.field_name: list(instances_dict)}
-        qs = self.get_query_set(instance=instances[0]).filter(**params)
+        qs = self.get_queryset(instance=instances[0]).filter(**params)
         # Since we're going to assign directly in the cache,
         # we must manage the reverse relation cache manually.
         if not self.field.rel.multiple:
@@ -378,7 +380,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
                     params = {'%s__%s' % (self.field.rel.field_name, other_field.rel.field_name): val}
                 else:
                     params = {'%s__exact' % self.field.rel.field_name: val}
-                qs = self.get_query_set(instance=instance)
+                qs = self.get_queryset(instance=instance)
                 # Assuming the database enforces foreign keys, this won't fail.
                 rel_obj = qs.get(**params)
                 if not self.field.rel.multiple:
@@ -490,12 +492,12 @@ class ForeignRelatedObjectsDescriptor(object):
                 }
                 self.model = rel_model
 
-            def get_query_set(self):
+            def get_queryset(self):
                 try:
                     return self.instance._prefetched_objects_cache[rel_field.related_query_name()]
                 except (AttributeError, KeyError):
                     db = self._db or router.db_for_read(self.model, instance=self.instance)
-                    qs = super(RelatedManager, self).get_query_set().using(db).filter(**self.core_filters)
+                    qs = super(RelatedManager, self).get_queryset().using(db).filter(**self.core_filters)
                     if getattr(self.instance, attname) is None:
                         return qs.none()
                     qs._known_related_objects = {rel_field: {self.instance.pk: self.instance}}
@@ -507,7 +509,7 @@ class ForeignRelatedObjectsDescriptor(object):
                 instances_dict = dict((instance_attr(inst), inst) for inst in instances)
                 db = self._db or router.db_for_read(self.model, instance=instances[0])
                 query = {'%s__%s__in' % (rel_field.name, attname): list(instances_dict)}
-                qs = super(RelatedManager, self).get_query_set().using(db).filter(**query)
+                qs = super(RelatedManager, self).get_queryset().using(db).filter(**query)
                 # Since we just bypassed this class' get_query_set(), we must manage
                 # the reverse relation manually.
                 for rel_obj in qs:
@@ -602,12 +604,12 @@ def create_many_related_manager(superclass, rel):
             else:
                 return obj.pk
 
-        def get_query_set(self):
+        def get_queryset(self):
             try:
                 return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
             except (AttributeError, KeyError):
                 db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)
-                return super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**self.core_filters)
+                return super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**self.core_filters)
 
         def get_prefetch_query_set(self, instances):
             instance = instances[0]
@@ -615,7 +617,7 @@ def create_many_related_manager(superclass, rel):
             db = self._db or router.db_for_read(instance.__class__, instance=instance)
             query = {'%s__pk__in' % self.query_field_name:
                          set(obj._get_pk_val() for obj in instances)}
-            qs = super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**query)
+            qs = super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**query)
 
             # M2M: need to annotate the query in order to get the primary model
             # that the secondary model was actually related to. We know that
diff --git a/django/db/models/manager.py b/django/db/models/manager.py
index cee2131..bc1724c 100644
--- a/django/db/models/manager.py
+++ b/django/db/models/manager.py
@@ -3,6 +3,8 @@ from django.db import router
 from django.db.models.query import QuerySet, insert_query, RawQuerySet
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
+from django.utils import six
+from django.utils.deprecation import DeprecatedGetQuerySet
 
 
 def ensure_default_manager(sender, **kwargs):
@@ -47,7 +49,7 @@ def ensure_default_manager(sender, **kwargs):
 signals.class_prepared.connect(ensure_default_manager)
 
 
-class Manager(object):
+class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
     # Tracks each time a Manager instance is created. Used to retain order.
     creation_counter = 0
 
@@ -112,110 +114,110 @@ class Manager(object):
     # PROXIES TO QUERYSET #
     #######################
 
-    def get_query_set(self):
+    def get_queryset(self):
         """Returns a new QuerySet object.  Subclasses can override this method
         to easily customize the behavior of the Manager.
         """
         return QuerySet(self.model, using=self._db)
 
     def none(self):
-        return self.get_query_set().none()
+        return self.get_queryset().none()
 
     def all(self):
-        return self.get_query_set()
+        return self.get_queryset()
 
     def count(self):
-        return self.get_query_set().count()
+        return self.get_queryset().count()
 
     def dates(self, *args, **kwargs):
-        return self.get_query_set().dates(*args, **kwargs)
+        return self.get_queryset().dates(*args, **kwargs)
 
     def distinct(self, *args, **kwargs):
-        return self.get_query_set().distinct(*args, **kwargs)
+        return self.get_queryset().distinct(*args, **kwargs)
 
     def extra(self, *args, **kwargs):
-        return self.get_query_set().extra(*args, **kwargs)
+        return self.get_queryset().extra(*args, **kwargs)
 
     def get(self, *args, **kwargs):
-        return self.get_query_set().get(*args, **kwargs)
+        return self.get_queryset().get(*args, **kwargs)
 
     def get_or_create(self, **kwargs):
-        return self.get_query_set().get_or_create(**kwargs)
+        return self.get_queryset().get_or_create(**kwargs)
 
     def create(self, **kwargs):
-        return self.get_query_set().create(**kwargs)
+        return self.get_queryset().create(**kwargs)
 
     def bulk_create(self, *args, **kwargs):
-        return self.get_query_set().bulk_create(*args, **kwargs)
+        return self.get_queryset().bulk_create(*args, **kwargs)
 
     def filter(self, *args, **kwargs):
-        return self.get_query_set().filter(*args, **kwargs)
+        return self.get_queryset().filter(*args, **kwargs)
 
     def aggregate(self, *args, **kwargs):
-        return self.get_query_set().aggregate(*args, **kwargs)
+        return self.get_queryset().aggregate(*args, **kwargs)
 
     def annotate(self, *args, **kwargs):
-        return self.get_query_set().annotate(*args, **kwargs)
+        return self.get_queryset().annotate(*args, **kwargs)
 
     def complex_filter(self, *args, **kwargs):
-        return self.get_query_set().complex_filter(*args, **kwargs)
+        return self.get_queryset().complex_filter(*args, **kwargs)
 
     def exclude(self, *args, **kwargs):
-        return self.get_query_set().exclude(*args, **kwargs)
+        return self.get_queryset().exclude(*args, **kwargs)
 
     def in_bulk(self, *args, **kwargs):
-        return self.get_query_set().in_bulk(*args, **kwargs)
+        return self.get_queryset().in_bulk(*args, **kwargs)
 
     def iterator(self, *args, **kwargs):
-        return self.get_query_set().iterator(*args, **kwargs)
+        return self.get_queryset().iterator(*args, **kwargs)
 
     def earliest(self, *args, **kwargs):
-        return self.get_query_set().earliest(*args, **kwargs)
+        return self.get_queryset().earliest(*args, **kwargs)
 
     def latest(self, *args, **kwargs):
-        return self.get_query_set().latest(*args, **kwargs)
+        return self.get_queryset().latest(*args, **kwargs)
 
     def order_by(self, *args, **kwargs):
-        return self.get_query_set().order_by(*args, **kwargs)
+        return self.get_queryset().order_by(*args, **kwargs)
 
     def select_for_update(self, *args, **kwargs):
-        return self.get_query_set().select_for_update(*args, **kwargs)
+        return self.get_queryset().select_for_update(*args, **kwargs)
 
     def select_related(self, *args, **kwargs):
-        return self.get_query_set().select_related(*args, **kwargs)
+        return self.get_queryset().select_related(*args, **kwargs)
 
     def prefetch_related(self, *args, **kwargs):
-        return self.get_query_set().prefetch_related(*args, **kwargs)
+        return self.get_queryset().prefetch_related(*args, **kwargs)
 
     def values(self, *args, **kwargs):
-        return self.get_query_set().values(*args, **kwargs)
+        return self.get_queryset().values(*args, **kwargs)
 
     def values_list(self, *args, **kwargs):
-        return self.get_query_set().values_list(*args, **kwargs)
+        return self.get_queryset().values_list(*args, **kwargs)
 
     def update(self, *args, **kwargs):
-        return self.get_query_set().update(*args, **kwargs)
+        return self.get_queryset().update(*args, **kwargs)
 
     def reverse(self, *args, **kwargs):
-        return self.get_query_set().reverse(*args, **kwargs)
+        return self.get_queryset().reverse(*args, **kwargs)
 
     def defer(self, *args, **kwargs):
-        return self.get_query_set().defer(*args, **kwargs)
+        return self.get_queryset().defer(*args, **kwargs)
 
     def only(self, *args, **kwargs):
-        return self.get_query_set().only(*args, **kwargs)
+        return self.get_queryset().only(*args, **kwargs)
 
     def using(self, *args, **kwargs):
-        return self.get_query_set().using(*args, **kwargs)
+        return self.get_queryset().using(*args, **kwargs)
 
     def exists(self, *args, **kwargs):
-        return self.get_query_set().exists(*args, **kwargs)
+        return self.get_queryset().exists(*args, **kwargs)
 
     def _insert(self, objs, fields, **kwargs):
         return insert_query(self.model, objs, fields, **kwargs)
 
     def _update(self, values, **kwargs):
-        return self.get_query_set()._update(values, **kwargs)
+        return self.get_queryset()._update(values, **kwargs)
 
     def raw(self, raw_query, params=None, *args, **kwargs):
         return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
@@ -262,5 +264,5 @@ class EmptyManager(Manager):
         super(EmptyManager, self).__init__()
         self.model = model
 
-    def get_query_set(self):
-        return super(EmptyManager, self).get_query_set().none()
+    def get_queryset(self):
+        return super(EmptyManager, self).get_queryset().none()
diff --git a/django/forms/models.py b/django/forms/models.py
index e2d739f..3948780 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -479,7 +479,7 @@ class BaseModelFormSet(BaseFormSet):
             if self.queryset is not None:
                 qs = self.queryset
             else:
-                qs = self.model._default_manager.get_query_set()
+                qs = self.model._default_manager.get_queryset()
 
             # If the queryset isn't already ordered we need to add an
             # artificial ordering here to make sure that all formsets
@@ -674,9 +674,9 @@ class BaseModelFormSet(BaseFormSet):
                 except IndexError:
                     pk_value = None
             if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
-                qs = pk.rel.to._default_manager.get_query_set()
+                qs = pk.rel.to._default_manager.get_queryset()
             else:
-                qs = self.model._default_manager.get_query_set()
+                qs = self.model._default_manager.get_queryset()
             qs = qs.using(form.instance._state.db)
             if form._meta.widgets:
                 widget = form._meta.widgets.get(self._pk_field.name, HiddenInput)
diff --git a/django/utils/deprecation.py b/django/utils/deprecation.py
new file mode 100644
index 0000000..eac306f
--- /dev/null
+++ b/django/utils/deprecation.py
@@ -0,0 +1,51 @@
+from __future__ import unicode_literals
+import warnings
+
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.unittest.compatibility import wraps
+
+
+def get_query_set_complain(name, get_query_set):
+    @wraps(get_query_set)
+    def complain(*args, **kwargs):
+        warnings.warn(
+            "`%s.get_query_set` is deprecated, use "
+            "`get_queryset` instead." % name,
+            PendingDeprecationWarning, 2)
+        return get_query_set(*args, **kwargs)
+    return complain
+
+
+class DeprecatedGetQuerySet(type):
+    """
+    Handles the deprecation paths of `get_queryset` in favor of `get_query_set`.
+
+    It does the following:
+        1) Issue a warning on class creation if `get_query_set` is defined.
+        2) Raise an `ImproperlyConfigured` error if both `get_queryset` and
+           `get_query_set` are defined.
+        3) Define a `get_queryset` method if not present.
+        4) Define or wrap the existing `get_query_set` to complain when called.
+
+    See #15363 for more details.
+    """
+    def __new__(cls, name, bases, attrs):
+        get_query_set = attrs.get('get_query_set')
+        get_queryset = attrs.get('get_queryset')
+        if get_query_set:
+            if get_queryset:
+                raise ImproperlyConfigured(
+                    "'Class `%s` should either define `get_queryset` or "
+                    "`get_query_set` not both.'" % name)
+            else:
+                attrs['get_queryset'] = get_query_set
+            warnings.warn(
+                "`%s.get_query_set` method should be "
+                "renamed `get_queryset`." % name,
+                PendingDeprecationWarning, 2)
+            get_query_set = get_query_set_complain(name, get_query_set)
+        elif get_queryset:
+            get_query_set = get_query_set_complain(name, get_queryset)
+        if get_query_set:
+            attrs['get_query_set'] = get_query_set
+        return type.__new__(cls, name, bases, attrs)
\ No newline at end of file
diff --git a/tests/modeltests/custom_managers/models.py b/tests/modeltests/custom_managers/models.py
index de7c177..2f5e62f 100644
--- a/tests/modeltests/custom_managers/models.py
+++ b/tests/modeltests/custom_managers/models.py
@@ -30,11 +30,11 @@ class Person(models.Model):
     def __str__(self):
         return "%s %s" % (self.first_name, self.last_name)
 
-# An example of a custom manager that sets get_query_set().
+# An example of a custom manager that sets get_queryset().
 
 class PublishedBookManager(models.Manager):
-    def get_query_set(self):
-        return super(PublishedBookManager, self).get_query_set().filter(is_published=True)
+    def get_queryset(self):
+        return super(PublishedBookManager, self).get_queryset().filter(is_published=True)
 
 @python_2_unicode_compatible
 class Book(models.Model):
@@ -50,8 +50,8 @@ class Book(models.Model):
 # An example of providing multiple custom managers.
 
 class FastCarManager(models.Manager):
-    def get_query_set(self):
-        return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150)
+    def get_queryset(self):
+        return super(FastCarManager, self).get_queryset().filter(top_speed__gt=150)
 
 @python_2_unicode_compatible
 class Car(models.Model):
diff --git a/tests/modeltests/fixtures/models.py b/tests/modeltests/fixtures/models.py
index 8bd3501..976716f 100644
--- a/tests/modeltests/fixtures/models.py
+++ b/tests/modeltests/fixtures/models.py
@@ -78,8 +78,8 @@ class Person(models.Model):
         return (self.name,)
 
 class SpyManager(PersonManager):
-    def get_query_set(self):
-        return super(SpyManager, self).get_query_set().filter(cover_blown=False)
+    def get_queryset(self):
+        return super(SpyManager, self).get_queryset().filter(cover_blown=False)
 
 class Spy(Person):
     objects = SpyManager()
diff --git a/tests/modeltests/generic_relations/models.py b/tests/modeltests/generic_relations/models.py
index 18d7623..34dc8d3 100644
--- a/tests/modeltests/generic_relations/models.py
+++ b/tests/modeltests/generic_relations/models.py
@@ -88,8 +88,8 @@ class Mineral(models.Model):
         return self.name
 
 class GeckoManager(models.Manager):
-    def get_query_set(self):
-        return super(GeckoManager, self).get_query_set().filter(has_tail=True)
+    def get_queryset(self):
+        return super(GeckoManager, self).get_queryset().filter(has_tail=True)
 
 class Gecko(models.Model):
     has_tail = models.BooleanField()
diff --git a/tests/modeltests/get_object_or_404/models.py b/tests/modeltests/get_object_or_404/models.py
index bda0605..bb9aa60 100644
--- a/tests/modeltests/get_object_or_404/models.py
+++ b/tests/modeltests/get_object_or_404/models.py
@@ -22,8 +22,8 @@ class Author(models.Model):
         return self.name
 
 class ArticleManager(models.Manager):
-    def get_query_set(self):
-        return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
+    def get_queryset(self):
+        return super(ArticleManager, self).get_queryset().filter(authors__name__icontains='sir')
 
 @python_2_unicode_compatible
 class Article(models.Model):
diff --git a/tests/modeltests/prefetch_related/models.py b/tests/modeltests/prefetch_related/models.py
index e58997d..81c5698 100644
--- a/tests/modeltests/prefetch_related/models.py
+++ b/tests/modeltests/prefetch_related/models.py
@@ -87,8 +87,8 @@ class Qualification(models.Model):
 
 
 class TeacherManager(models.Manager):
-    def get_query_set(self):
-        return super(TeacherManager, self).get_query_set().prefetch_related('qualifications')
+    def get_queryset(self):
+        return super(TeacherManager, self).get_queryset().prefetch_related('qualifications')
 
 
 @python_2_unicode_compatible
diff --git a/tests/modeltests/proxy_models/models.py b/tests/modeltests/proxy_models/models.py
index 6c962aa..ffb3665 100644
--- a/tests/modeltests/proxy_models/models.py
+++ b/tests/modeltests/proxy_models/models.py
@@ -10,12 +10,12 @@ from django.utils.encoding import python_2_unicode_compatible
 # A couple of managers for testing managing overriding in proxy model cases.
 
 class PersonManager(models.Manager):
-    def get_query_set(self):
-        return super(PersonManager, self).get_query_set().exclude(name="fred")
+    def get_queryset(self):
+        return super(PersonManager, self).get_queryset().exclude(name="fred")
 
 class SubManager(models.Manager):
-    def get_query_set(self):
-        return super(SubManager, self).get_query_set().exclude(name="wilma")
+    def get_queryset(self):
+        return super(SubManager, self).get_queryset().exclude(name="wilma")
 
 @python_2_unicode_compatible
 class Person(models.Model):
diff --git a/tests/regressiontests/admin_changelist/models.py b/tests/regressiontests/admin_changelist/models.py
index 4ba2f9c..786b438 100644
--- a/tests/regressiontests/admin_changelist/models.py
+++ b/tests/regressiontests/admin_changelist/models.py
@@ -74,8 +74,8 @@ class UnorderedObject(models.Model):
 
 
 class OrderedObjectManager(models.Manager):
-    def get_query_set(self):
-        return super(OrderedObjectManager, self).get_query_set().order_by('number')
+    def get_queryset(self):
+        return super(OrderedObjectManager, self).get_queryset().order_by('number')
 
 class OrderedObject(models.Model):
     """
diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py
index 7a3a5c0..2f94cc7 100644
--- a/tests/regressiontests/admin_changelist/tests.py
+++ b/tests/regressiontests/admin_changelist/tests.py
@@ -39,7 +39,7 @@ class ChangeListTests(TestCase):
 
     def test_select_related_preserved(self):
         """
-        Regression test for #10348: ChangeList.get_query_set() shouldn't
+        Regression test for #10348: ChangeList.get_queryset() shouldn't
         overwrite a custom select_related provided by ModelAdmin.queryset().
         """
         m = ChildAdmin(Child, admin.site)
diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
index 11f792e..d25c8f4 100644
--- a/tests/regressiontests/admin_filters/tests.py
+++ b/tests/regressiontests/admin_filters/tests.py
@@ -183,7 +183,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book])
 
         # Make sure the correct choice is selected
@@ -200,7 +200,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         if (self.today.year, self.today.month) == (self.one_week_ago.year, self.one_week_ago.month):
             # In case one week ago is in the same month.
             self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
@@ -221,7 +221,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         if self.today.year == self.one_week_ago.year:
             # In case one week ago is in the same year.
             self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
@@ -242,7 +242,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
 
         # Make sure the correct choice is selected
@@ -266,7 +266,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.django_book])
 
         # Make sure the last choice is None and is selected
@@ -293,7 +293,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.gipsy_book])
 
         # Make sure the last choice is None and is selected
@@ -321,7 +321,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.django_book, self.bio_book, self.djangonaut_book])
 
         # Make sure the last choice is None and is selected
@@ -349,7 +349,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, User, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.lisa])
 
         # Make sure the last choice is None and is selected
@@ -374,7 +374,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, User, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.alfred])
 
         # Make sure the last choice is None and is selected
@@ -410,7 +410,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.bio_book])
 
         # Make sure the correct choice is selected
@@ -424,7 +424,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
 
         # Make sure the correct choice is selected
@@ -438,7 +438,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.django_book])
 
         # Make sure the correct choice is selected
@@ -457,7 +457,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), list(Book.objects.all().order_by('-id')))
 
         # Make sure the correct choice is selected
@@ -474,7 +474,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [])
 
         # Make sure the correct choice is selected
@@ -491,7 +491,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.bio_book])
 
         # Make sure the correct choice is selected
@@ -508,7 +508,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
 
         # Make sure the correct choice is selected
@@ -525,7 +525,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.djangonaut_book])
 
         # Make sure the correct choices are selected
@@ -615,7 +615,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.bio_book])
 
         filterspec = changelist.get_filters(request)[0][-1]
@@ -637,7 +637,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.bio_book])
 
         # Make sure the correct choice is selected
@@ -654,7 +654,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.bio_book])
 
         # Make sure the correct choice is selected
@@ -676,7 +676,7 @@ class ListFiltersTests(TestCase):
         request = self.request_factory.get('/', {'department': self.john.pk})
         changelist = self.get_changelist(request, Employee, modeladmin)
 
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
 
         self.assertEqual(list(queryset), [self.john])
 
@@ -698,7 +698,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Employee, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.jack, self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
@@ -723,7 +723,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Employee, modeladmin)
 
         # Make sure the correct queryset is returned
-        queryset = changelist.get_query_set(request)
+        queryset = changelist.get_queryset(request)
         self.assertEqual(list(queryset), [self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
diff --git a/tests/regressiontests/admin_views/admin.py b/tests/regressiontests/admin_views/admin.py
index 435883e..2d85e54 100644
--- a/tests/regressiontests/admin_views/admin.py
+++ b/tests/regressiontests/admin_views/admin.py
@@ -417,7 +417,7 @@ class PostAdmin(admin.ModelAdmin):
 
 
 class CustomChangeList(ChangeList):
-    def get_query_set(self, request):
+    def get_queryset(self, request):
         return self.root_query_set.filter(pk=9999) # Does not exist
 
 
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
index 2977b86..ae19d58 100644
--- a/tests/regressiontests/admin_widgets/models.py
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -37,8 +37,8 @@ class Album(models.Model):
         return self.name
 
 class HiddenInventoryManager(models.Manager):
-    def get_query_set(self):
-        return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
+    def get_queryset(self):
+        return super(HiddenInventoryManager, self).get_queryset().filter(hidden=False)
 
 @python_2_unicode_compatible
 class Inventory(models.Model):
diff --git a/tests/regressiontests/custom_managers_regress/models.py b/tests/regressiontests/custom_managers_regress/models.py
index 71073f0..95cf6e8 100644
--- a/tests/regressiontests/custom_managers_regress/models.py
+++ b/tests/regressiontests/custom_managers_regress/models.py
@@ -10,8 +10,8 @@ class RestrictedManager(models.Manager):
     """
     A manager that filters out non-public instances.
     """
-    def get_query_set(self):
-        return super(RestrictedManager, self).get_query_set().filter(is_public=True)
+    def get_queryset(self):
+        return super(RestrictedManager, self).get_queryset().filter(is_public=True)
 
 @python_2_unicode_compatible
 class RelatedModel(models.Model):
diff --git a/tests/regressiontests/deprecation/__init__.py b/tests/regressiontests/deprecation/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/regressiontests/deprecation/models.py b/tests/regressiontests/deprecation/models.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/regressiontests/deprecation/tests.py b/tests/regressiontests/deprecation/tests.py
new file mode 100644
index 0000000..0ff402c
--- /dev/null
+++ b/tests/regressiontests/deprecation/tests.py
@@ -0,0 +1,131 @@
+from __future__ import unicode_literals
+import warnings
+
+from django.test.testcases import SimpleTestCase
+from django.utils import six
+from django.utils.deprecation import DeprecatedGetQuerySet
+from django.core.exceptions import ImproperlyConfigured
+
+
+class DeprecatedGetQuerySetTest(SimpleTestCase):
+    """
+    Tests the `DeprecatedGetQuerySet` type introduced to rename `get_query_set`
+    to `get_queryset` across code base following #15363.
+    """
+    def test_class_definition_warnings(self):
+        """
+        Ensure a warning is raised upon class definition to suggest renaming
+        the faulty method.
+        """
+        with warnings.catch_warnings(record=True) as recorded:
+            warnings.simplefilter('always')
+            class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_query_set(self):
+                    pass
+            self.assertEqual(len(recorded), 1)
+            msg = str(recorded[0].message)
+            self.assertEqual(msg,
+                '`Manager.get_query_set` method should be renamed `get_queryset`.')
+
+    def test_get_queryset_defined(self):
+        """
+        Ensure `get_query_set` complains and not `get_queryset` when only
+        `get_queryset` is defined.
+        """
+        with warnings.catch_warnings(record=True) as recorded:
+            warnings.simplefilter('ignore')
+            class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_queryset(self):
+                    pass
+            warnings.simplefilter('always')
+            manager = Manager()
+            manager.get_queryset()
+            self.assertEqual(len(recorded), 0)
+            manager.get_query_set()
+            self.assertEqual(len(recorded), 1)
+            msg = str(recorded.pop().message)
+            self.assertEqual(msg,
+                '`Manager.get_query_set` is deprecated, use `get_queryset` instead.')
+
+    def test_get_query_set_defined(self):
+        """
+        Ensure `get_query_set` complains and not `get_queryset` when only
+        `get_query_set` is defined.
+        """
+        with warnings.catch_warnings(record=True) as recorded:
+            warnings.simplefilter('ignore')
+            class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_query_set(self):
+                    pass
+            warnings.simplefilter('always')
+            manager = Manager()
+            manager.get_queryset()
+            self.assertEqual(len(recorded), 0)
+            manager.get_query_set()
+            self.assertEqual(len(recorded), 1)
+            msg = str(recorded.pop().message)
+            self.assertEqual(msg,
+                '`Manager.get_query_set` is deprecated, use `get_queryset` instead.')
+
+    def test_deprecated_subclass_renamed(self):
+        """
+        Ensure the correct warnings are raised when a class that didn't rename
+        `get_query_set` subclass one that did.
+        """
+        with warnings.catch_warnings(record=True) as recorded:
+            warnings.simplefilter('ignore')
+            class Renamed(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_queryset(self):
+                    pass
+            class Deprecated(Renamed):
+                def get_query_set(self):
+                    super(Deprecated, self).get_query_set()
+            warnings.simplefilter('always')
+            deprecated = Deprecated()
+            deprecated.get_queryset()
+            self.assertEqual(len(recorded), 1)
+            msg = str(recorded.pop().message)
+            self.assertEqual(msg,
+                '`Renamed.get_query_set` is deprecated, use `get_queryset` instead.')
+            deprecated.get_query_set()
+            self.assertEqual(len(recorded), 2)
+            msgs = [str(warning.message) for warning in recorded]
+            self.assertEqual(msgs, [
+                '`Deprecated.get_query_set` is deprecated, use `get_queryset` instead.',
+                '`Renamed.get_query_set` is deprecated, use `get_queryset` instead.'])
+
+    def test_renamed_subclass_deprecated(self):
+        """
+        Ensure the correct warnings are raised when a class that renamed
+        `get_query_set` subclass one that didn't.
+        """
+        with warnings.catch_warnings(record=True) as recorded:
+            warnings.simplefilter('ignore')
+            class Deprecated(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_query_set(self):
+                    pass
+            class Renamed(Deprecated):
+                def get_queryset(self):
+                    super(Renamed, self).get_queryset()
+            warnings.simplefilter('always')
+            renamed = Renamed()
+            renamed.get_queryset()
+            self.assertEqual(len(recorded), 0)
+            renamed.get_query_set()
+            self.assertEqual(len(recorded), 1)
+            msg = str(recorded.pop().message)
+            self.assertEqual(msg,
+                '`Renamed.get_query_set` is deprecated, use `get_queryset` instead.')
+
+    def test_improperly_configured(self):
+        """
+        Ensure a significant `ImproperlyConfigured` error is raised when
+        both `get_queryset` and `get_query_set` are defined.
+        """
+        msg = 'Class `Manager` should either define `get_queryset` or `get_query_set` not both.'
+        with self.assertRaisesMessage(ImproperlyConfigured, msg):
+            class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
+                def get_queryset(self):
+                    pass
+                def get_query_set(self):
+                    pass
\ No newline at end of file
diff --git a/tests/regressiontests/managers_regress/models.py b/tests/regressiontests/managers_regress/models.py
index d72970d..d8dd22e 100644
--- a/tests/regressiontests/managers_regress/models.py
+++ b/tests/regressiontests/managers_regress/models.py
@@ -7,18 +7,18 @@ from django.utils.encoding import python_2_unicode_compatible
 
 
 class OnlyFred(models.Manager):
-    def get_query_set(self):
-        return super(OnlyFred, self).get_query_set().filter(name='fred')
+    def get_queryset(self):
+        return super(OnlyFred, self).get_queryset().filter(name='fred')
 
 
 class OnlyBarney(models.Manager):
-    def get_query_set(self):
-        return super(OnlyBarney, self).get_query_set().filter(name='barney')
+    def get_queryset(self):
+        return super(OnlyBarney, self).get_queryset().filter(name='barney')
 
 
 class Value42(models.Manager):
-    def get_query_set(self):
-        return super(Value42, self).get_query_set().filter(value=42)
+    def get_queryset(self):
+        return super(Value42, self).get_queryset().filter(value=42)
 
 
 class AbstractBase1(models.Model):
diff --git a/tests/regressiontests/modeladmin/tests.py b/tests/regressiontests/modeladmin/tests.py
index b0a1812..2f3eddd 100644
--- a/tests/regressiontests/modeladmin/tests.py
+++ b/tests/regressiontests/modeladmin/tests.py
@@ -1074,7 +1074,7 @@ class ValidationTests(unittest.TestCase):
                 return 'awesomeness'
             def get_choices(self, request):
                 return (('bit', 'A bit awesome'), ('very', 'Very awesome'), )
-            def get_query_set(self, cl, qs):
+            def get_queryset(self, cl, qs):
                 return qs
 
         class ValidationTestModelAdmin(ModelAdmin):
diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py
index 16583e8..7489aeb 100644
--- a/tests/regressiontests/queries/models.py
+++ b/tests/regressiontests/queries/models.py
@@ -175,8 +175,8 @@ class LoopZ(models.Model):
 
 # A model and custom default manager combination.
 class CustomManager(models.Manager):
-    def get_query_set(self):
-        qs = super(CustomManager, self).get_query_set()
+    def get_queryset(self):
+        qs = super(CustomManager, self).get_queryset()
         return qs.filter(public=True, tag__name='t1')
 
 @python_2_unicode_compatible
@@ -196,8 +196,8 @@ class Detail(models.Model):
     data = models.CharField(max_length=10)
 
 class MemberManager(models.Manager):
-    def get_query_set(self):
-        return super(MemberManager, self).get_query_set().select_related("details")
+    def get_queryset(self):
+        return super(MemberManager, self).get_queryset().select_related("details")
 
 class Member(models.Model):
     name = models.CharField(max_length=10)
diff --git a/tests/regressiontests/reverse_single_related/models.py b/tests/regressiontests/reverse_single_related/models.py
index 898be84..30ba345 100644
--- a/tests/regressiontests/reverse_single_related/models.py
+++ b/tests/regressiontests/reverse_single_related/models.py
@@ -2,8 +2,8 @@ from django.db import models
 
 
 class SourceManager(models.Manager):
-    def get_query_set(self):
-        return super(SourceManager, self).get_query_set().filter(is_public=True)
+    def get_queryset(self):
+        return super(SourceManager, self).get_queryset().filter(is_public=True)
 
 class Source(models.Model):
     is_public = models.BooleanField()
