Skip to content

Commit

Permalink
Merge pull request #186 from gilgamezh/allow_extra_manager
Browse files Browse the repository at this point in the history
Allow to set a 'extra' custom manager withut override the default
  • Loading branch information
vdboor committed Jan 3, 2016
2 parents 0df8048 + b17aa58 commit f10b5d2
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
2 changes: 1 addition & 1 deletion polymorphic/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def get_first_user_defined_manager(mcs, new_class):
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))
Expand Down
37 changes: 37 additions & 0 deletions polymorphic/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,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()
Expand Down Expand Up @@ -830,6 +842,31 @@ def test_user_defined_manager(self):
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]), '<ModelWithMyManagerNoDefault: id 6, field1 (CharField) "D1b", field4 (CharField) "D4b">')
self.assertEqual(repr(objects[1]), '<ModelWithMyManagerNoDefault: id 5, field1 (CharField) "D1a", field4 (CharField) "D4a">')
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()
Expand Down

0 comments on commit f10b5d2

Please sign in to comment.