From f419e37ab3c53e9e9ddbb1d68c3efd0190d9ebb1 Mon Sep 17 00:00:00 2001 From: gilgamezh Date: Wed, 23 Dec 2015 21:07:44 -0300 Subject: [PATCH] Allow to set a 'extra' custom manager withut override the _default_manager --- polymorphic/base.py | 2 +- polymorphic/tests.py | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/polymorphic/base.py b/polymorphic/base.py index 10fe58c..1b6baab 100644 --- a/polymorphic/base.py +++ b/polymorphic/base.py @@ -167,7 +167,7 @@ class PolymorphicModelBase(ModelBase): for key, val in new_class.__dict__.items(): if isinstance(val, ManagerDescriptor): val = val.manager - if not isinstance(val, PolymorphicManager) or type(val) is PolymorphicManager: + if not isinstance(val, PolymorphicManager): continue mgr_list.append((val.creation_counter, key, val)) diff --git a/polymorphic/tests.py b/polymorphic/tests.py index d4abb8c..412ed0f 100644 --- a/polymorphic/tests.py +++ b/polymorphic/tests.py @@ -124,6 +124,18 @@ class ModelWithMyManager(ShowFieldTypeAndContent, Model2A): objects = MyManager() field4 = models.CharField(max_length=10) + +class ModelWithMyManagerNoDefault(ShowFieldTypeAndContent, Model2A): + objects = PolymorphicManager() + my_objects = MyManager() + field4 = models.CharField(max_length=10) + +class ModelWithMyManagerDefault(ShowFieldTypeAndContent, Model2A): + my_objects = MyManager() + objects = PolymorphicManager() + field4 = models.CharField(max_length=10) + + if django.VERSION >= (1,7): class ModelWithMyManager2(ShowFieldTypeAndContent, Model2A): objects = MyManagerQuerySet.as_manager() @@ -700,6 +712,31 @@ class PolymorphicTests(TestCase): self.assertIs(type(ModelWithMyManager._default_manager), MyManager) self.assertIs(type(ModelWithMyManager.base_objects), models.Manager) + def test_user_defined_manager_as_secondary(self): + self.create_model2abcd() + ModelWithMyManagerNoDefault.objects.create(field1='D1a', field4='D4a') + ModelWithMyManagerNoDefault.objects.create(field1='D1b', field4='D4b') + + objects = ModelWithMyManagerNoDefault.my_objects.all() # MyManager should reverse the sorting of field1 + self.assertEqual(repr(objects[0]), '') + self.assertEqual(repr(objects[1]), '') + self.assertEqual(len(objects), 2) + + self.assertIs(type(ModelWithMyManagerNoDefault.my_objects), MyManager) + self.assertIs(type(ModelWithMyManagerNoDefault.objects), PolymorphicManager) + self.assertIs(type(ModelWithMyManagerNoDefault._default_manager), PolymorphicManager) + self.assertIs(type(ModelWithMyManagerNoDefault.base_objects), models.Manager) + + def test_user_objects_manager_as_secondary(self): + self.create_model2abcd() + ModelWithMyManagerDefault.objects.create(field1='D1a', field4='D4a') + ModelWithMyManagerDefault.objects.create(field1='D1b', field4='D4b') + + self.assertIs(type(ModelWithMyManagerDefault.my_objects), MyManager) + self.assertIs(type(ModelWithMyManagerDefault.objects), PolymorphicManager) + self.assertIs(type(ModelWithMyManagerDefault._default_manager), MyManager) + self.assertIs(type(ModelWithMyManagerDefault.base_objects), models.Manager) + @skipIf(django.VERSION < (1,7), "This test needs Django 1.7+") def test_user_defined_queryset_as_manager(self): self.create_model2abcd()