Commit 7d471fe6 authored by Aric Coady's avatar Aric Coady Committed by Tim Graham
Browse files

[1.8.x] Refs #20625 -- Fixed custom queryset chaining with values() and values_list().

parent 4f0966e7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -937,10 +937,10 @@ class QuerySet(object):
                                             using=self.db)

    def _clone(self, klass=None, setup=False, **kwargs):
        base_queryset_class = getattr(self, '_base_queryset_class', self.__class__)
        if klass is None:
            klass = self.__class__
        elif not issubclass(self.__class__, klass):
            base_queryset_class = getattr(self, '_base_queryset_class', self.__class__)
        elif not (issubclass(base_queryset_class, klass) or issubclass(klass, base_queryset_class)):
            class_bases = (klass, base_queryset_class)
            class_dict = {
                '_base_queryset_class': base_queryset_class,
+3 −0
Original line number Diff line number Diff line
@@ -36,3 +36,6 @@ Bugfixes
* Changed ``Count`` queries to execute ``COUNT(*)`` instead of ``COUNT('*')``
  as versions of Django before 1.8 did (:ticket:`25377`). This may fix a
  performance regression on some databases.

* Fixed custom queryset chaining with ``values()`` and ``values_list()``
  (:ticket:`20625`).
+4 −0
Original line number Diff line number Diff line
@@ -76,6 +76,10 @@ class CustomManagerTests(TestCase):
            self.assertEqual(list(queryset), [six.text_type("Bugs")])
            self.assertEqual(queryset._filter_CustomQuerySet, True)

            self.assertIsInstance(queryset.values(), CustomQuerySet)
            self.assertIsInstance(queryset.values().values(), CustomQuerySet)
            self.assertIsInstance(queryset.values_list().values(), CustomQuerySet)

    def test_init_args(self):
        """
        The custom manager __init__() argument has been set.