From 33f0ca9f6235b46a70caa69ab6bc74d6dd9fc8ab Mon Sep 17 00:00:00 2001 From: Dirk Groten Date: Sun, 20 Oct 2019 18:24:57 +0200 Subject: [PATCH] Fix creation_counter on the patched managers in order to ensure the original local managers are prioritised over the inherited managers. --- modeltranslation/translator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modeltranslation/translator.py b/modeltranslation/translator.py index 744ceed..3194b60 100644 --- a/modeltranslation/translator.py +++ b/modeltranslation/translator.py @@ -203,11 +203,17 @@ def add_manager(model): if model._meta.abstract: return # Make all managers local for this model to fix patching parent model managers + added = set(model._meta.managers) - set(model._meta.local_managers) model._meta.local_managers = model._meta.managers for current_manager in model._meta.local_managers: prev_class = current_manager.__class__ patch_manager_class(current_manager) + if current_manager in added: + # Since default_manager is fetched by order of creation, any manager + # moved from parent class to child class needs to receive a new creation_counter + # in order to be ordered after the original local managers + current_manager._set_creation_counter() if model._default_manager.__class__ is prev_class: # Normally model._default_manager is a reference to one of model's managers # (and would be patched by the way).