Merge pull request #186 from gilgamezh/allow_extra_manager
Allow to set a 'extra' custom manager withut override the defaultfix_request_path_info
commit
f10b5d23c8
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -830,6 +842,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]), '<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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue