diff options
| author | Loïc Bistuer <loic.bistuer@gmail.com> | 2016-08-19 01:24:45 +0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-19 01:24:45 +0700 |
| commit | d4eefc7e2af0d93283ed1c03e0af0a482982b6f0 (patch) | |
| tree | 8ceccaa265fa82ad8946515e8b75fa80b3cb0f8e /django | |
| parent | 8cd900c8193198080672603f0f266a4e8df78860 (diff) | |
Fixed #27073 -- Removed duplicated managers in `Model._meta.managers`.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/options.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/django/db/models/options.py b/django/db/models/options.py index 670e2a5a2f..38f2fcfefc 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -369,11 +369,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, @@ -387,7 +392,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): |
