From c0cf73a57d7f77af348aeb854e7b4f670dc3cee7 Mon Sep 17 00:00:00 2001 From: Andriy Sokolovskiy Date: Thu, 18 Jun 2015 13:33:36 +0300 Subject: [PATCH] Refs #20203 -- Allowed adding custom default manager to the model state If the only manager on the model is the default manager defined by Django (`objects = models.Manager()`), this manager will not be added to the model state. If it is custom, it needs to be passed to the model state. --- django/db/migrations/state.py | 5 ++++- tests/migrations/test_state.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index 33362ed06fa..c865f139d79 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -465,7 +465,10 @@ class ModelState(object): (name, instance) for name, (cc, instance) in sorted(managers_mapping.items(), key=lambda v: v[1]) ] - if managers == [(default_manager_name, models.Manager())]: + # If the only manager on the model is the default manager defined + # by Django (`objects = models.Manager()`), this manager will not + # be added to the model state. + if managers == [('objects', models.Manager())]: managers = [] else: managers = [] diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py index 2ad8025122b..7a959c53ebc 100644 --- a/tests/migrations/test_state.py +++ b/tests/migrations/test_state.py @@ -166,6 +166,26 @@ class StateTests(SimpleTestCase): self.assertEqual([mgr.args for name, mgr in food_order_manager_state.managers], [('a', 'b', 1, 2), ('x', 'y', 3, 4)]) + def test_custom_default_manager_added_to_the_model_state(self): + """ + When the default manager of the model is a custom manager, + it needs to be added to the model state. + """ + new_apps = Apps(['migrations']) + custom_manager = models.Manager() + + class Author(models.Model): + objects = models.TextField() + authors = custom_manager + + class Meta: + app_label = 'migrations' + apps = new_apps + + project_state = ProjectState.from_apps(new_apps) + author_state = project_state.models['migrations', 'author'] + self.assertEqual(author_state.managers, [('authors', custom_manager)]) + def test_apps_bulk_update(self): """ StateApps.bulk_update() should update apps.ready to False and reset