protip: after a colon in python, HIT THE ENTER KEY!
parent
f42c58c0d4
commit
fabae70ed4
|
|
@ -91,18 +91,27 @@ class PolymorphicModelBase(ModelBase):
|
||||||
use correct mro, only use managers with _inherited==False (they are of no use),
|
use correct mro, only use managers with _inherited==False (they are of no use),
|
||||||
skip managers that are overwritten by the user with same-named class attributes (in attrs)
|
skip managers that are overwritten by the user with same-named class attributes (in attrs)
|
||||||
"""
|
"""
|
||||||
add_managers = []; add_managers_keys = set()
|
add_managers = []
|
||||||
|
add_managers_keys = set()
|
||||||
for base in self.__mro__[1:]:
|
for base in self.__mro__[1:]:
|
||||||
if not issubclass(base, models.Model): continue
|
if not issubclass(base, models.Model):
|
||||||
if not getattr(base, 'polymorphic_model_marker', None): continue # leave managers of non-polym. models alone
|
continue
|
||||||
|
if not getattr(base, 'polymorphic_model_marker', None):
|
||||||
|
continue # leave managers of non-polym. models alone
|
||||||
|
|
||||||
for key, manager in base.__dict__.items():
|
for key, manager in base.__dict__.items():
|
||||||
if type(manager) == models.manager.ManagerDescriptor: manager = manager.manager
|
if type(manager) == models.manager.ManagerDescriptor:
|
||||||
if not isinstance(manager, models.Manager): continue
|
manager = manager.manager
|
||||||
if key in ['_base_manager']: continue # let Django handle _base_manager
|
if not isinstance(manager, models.Manager):
|
||||||
if key in attrs: continue
|
continue
|
||||||
if key in add_managers_keys: continue # manager with that name already added, skip
|
if key in ['_base_manager']:
|
||||||
if manager._inherited: continue # inherited managers (on the bases) have no significance, they are just copies
|
continue # let Django handle _base_manager
|
||||||
|
if key in attrs:
|
||||||
|
continue
|
||||||
|
if key in add_managers_keys:
|
||||||
|
continue # manager with that name already added, skip
|
||||||
|
if manager._inherited:
|
||||||
|
continue # inherited managers (on the bases) have no significance, they are just copies
|
||||||
#print >>sys.stderr,'##',self.__name__, key
|
#print >>sys.stderr,'##',self.__name__, key
|
||||||
if isinstance(manager, PolymorphicManager): # validate any inherited polymorphic managers
|
if isinstance(manager, PolymorphicManager): # validate any inherited polymorphic managers
|
||||||
self.validate_model_manager(manager, self.__name__, key)
|
self.validate_model_manager(manager, self.__name__, key)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue