From 326bd7bc02f59846af74d53e9da1394f81b894df Mon Sep 17 00:00:00 2001 From: Sebastian Illing Date: Sat, 8 Dec 2018 06:26:36 +0100 Subject: [PATCH] Fix missing subclasses and annotated in cloned InheritanceQueryset (#335) Bug only occurs in django > 2 --- model_utils/managers.py | 6 +++++- tests/test_managers/test_inheritance_manager.py | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/model_utils/managers.py b/model_utils/managers.py index afd0c5b..15b5c7c 100644 --- a/model_utils/managers.py +++ b/model_utils/managers.py @@ -97,7 +97,11 @@ class InheritanceQuerySetMixin(object): def _clone(self, klass=None, setup=False, **kwargs): if django.VERSION >= (2, 0): - return super(InheritanceQuerySetMixin, self)._clone() + qs = super(InheritanceQuerySetMixin, self)._clone() + for name in ['subclasses', '_annotated']: + if hasattr(self, name): + setattr(qs, name, getattr(self, name)) + return qs for name in ['subclasses', '_annotated']: if hasattr(self, name): diff --git a/tests/test_managers/test_inheritance_manager.py b/tests/test_managers/test_inheritance_manager.py index 14ae047..d2b8b4f 100644 --- a/tests/test_managers/test_inheritance_manager.py +++ b/tests/test_managers/test_inheritance_manager.py @@ -460,3 +460,7 @@ class InheritanceManagerRelatedTests(InheritanceManagerTests): qs = InheritanceManagerTestParent.objects.annotate( test_count=models.Count('id')).select_subclasses() self.assertEqual(qs.get(id=self.child1.id).test_count, 1) + + def test_clone_when_inheritance_queryset_selects_subclasses_should_clone_them_too(self): + qs = InheritanceManagerTestParent.objects.select_subclasses() + self.assertEqual(qs.subclasses, qs._clone().subclasses)