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.
This commit is contained in:
parent
1d40204f82
commit
c0cf73a57d
|
@ -465,7 +465,10 @@ class ModelState(object):
|
||||||
(name, instance) for name, (cc, instance) in
|
(name, instance) for name, (cc, instance) in
|
||||||
sorted(managers_mapping.items(), key=lambda v: v[1])
|
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 = []
|
managers = []
|
||||||
else:
|
else:
|
||||||
managers = []
|
managers = []
|
||||||
|
|
|
@ -166,6 +166,26 @@ class StateTests(SimpleTestCase):
|
||||||
self.assertEqual([mgr.args for name, mgr in food_order_manager_state.managers],
|
self.assertEqual([mgr.args for name, mgr in food_order_manager_state.managers],
|
||||||
[('a', 'b', 1, 2), ('x', 'y', 3, 4)])
|
[('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):
|
def test_apps_bulk_update(self):
|
||||||
"""
|
"""
|
||||||
StateApps.bulk_update() should update apps.ready to False and reset
|
StateApps.bulk_update() should update apps.ready to False and reset
|
||||||
|
|
Loading…
Reference in New Issue