diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/state.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index 44eab227ed..7cfdd6cd99 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -446,12 +446,19 @@ class ModelState(object): bases = (models.Model,) managers = [] + manager_names = set() default_manager_shim = None for manager in model._meta.managers: - if manager.use_in_migrations: + manager_name = force_text(manager.name) + if manager_name in manager_names: + # Skip overridden managers. + continue + elif manager.use_in_migrations: + # Copy managers usable in migrations. new_manager = copy.copy(manager) new_manager._set_creation_counter() elif manager is model._base_manager or manager is model._default_manager: + # Shim custom managers used as default and base managers. new_manager = models.Manager() new_manager.model = manager.model new_manager.name = manager.name @@ -459,7 +466,8 @@ class ModelState(object): default_manager_shim = new_manager else: continue - managers.append((force_text(manager.name), new_manager)) + manager_names.add(manager_name) + managers.append((manager_name, new_manager)) # Ignore a shimmed default manager called objects if it's the only one. if managers == [('objects', default_manager_shim)]: |
