1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

[1.10.x] Fixed #27073 -- Removed duplicated managers in Model._meta.managers.

Backport of d4eefc7e2a from master
This commit is contained in:
Loïc Bistuer
2016-08-19 01:24:45 +07:00
parent 0cab98e084
commit 21f18e5372
3 changed files with 24 additions and 1 deletions

View File

@@ -368,11 +368,16 @@ class Options(object):
@cached_property
def managers(self):
managers = []
seen_managers = set()
bases = (b for b in self.model.mro() if hasattr(b, '_meta'))
for depth, base in enumerate(bases):
for manager in base._meta.local_managers:
if manager.name in seen_managers:
continue
manager = copy.copy(manager)
manager.model = self.model
seen_managers.add(manager.name)
managers.append((depth, manager.creation_counter, manager))
# Used for deprecation of legacy manager inheritance,
@@ -386,7 +391,7 @@ class Options(object):
@cached_property
def managers_map(self):
return {manager.name: manager for manager in reversed(self.managers)}
return {manager.name: manager for manager in self.managers}
@cached_property
def base_manager(self):