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():
|
for key, val in new_class.__dict__.items():
|
||||||
if isinstance(val, ManagerDescriptor):
|
if isinstance(val, ManagerDescriptor):
|
||||||
val = val.manager
|
val = val.manager
|
||||||
if not isinstance(val, PolymorphicManager) or type(val) is PolymorphicManager:
|
if not isinstance(val, PolymorphicManager):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
mgr_list.append((val.creation_counter, key, val))
|
mgr_list.append((val.creation_counter, key, val))
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,18 @@ class ModelWithMyManager(ShowFieldTypeAndContent, Model2A):
|
||||||
objects = MyManager()
|
objects = MyManager()
|
||||||
field4 = models.CharField(max_length=10)
|
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):
|
if django.VERSION >= (1, 7):
|
||||||
class ModelWithMyManager2(ShowFieldTypeAndContent, Model2A):
|
class ModelWithMyManager2(ShowFieldTypeAndContent, Model2A):
|
||||||
objects = MyManagerQuerySet.as_manager()
|
objects = MyManagerQuerySet.as_manager()
|
||||||
|
|
@ -830,6 +842,31 @@ class PolymorphicTests(TestCase):
|
||||||
self.assertIs(type(ModelWithMyManager._default_manager), MyManager)
|
self.assertIs(type(ModelWithMyManager._default_manager), MyManager)
|
||||||
self.assertIs(type(ModelWithMyManager.base_objects), models.Manager)
|
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+")
|
@skipIf(django.VERSION < (1, 7), "This test needs Django 1.7+")
|
||||||
def test_user_defined_queryset_as_manager(self):
|
def test_user_defined_queryset_as_manager(self):
|
||||||
self.create_model2abcd()
|
self.create_model2abcd()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue