From 61f3e22e38516d8284a45e2b2792a61d541f9e78 Mon Sep 17 00:00:00 2001 From: Chris Lamb Date: Thu, 2 Jul 2015 18:42:24 +0100 Subject: [PATCH] Fixed #25054 -- Added app_label to swapped model AttributeError --- django/db/models/manager.py | 10 +++++++--- tests/managers_regress/tests.py | 32 +++++++++++++++----------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/django/db/models/manager.py b/django/db/models/manager.py index a8fd624b35..eb013fd87c 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -270,9 +270,13 @@ class SwappedManagerDescriptor(object): self.model = model def __get__(self, instance, type=None): - raise AttributeError("Manager isn't available; %s has been swapped for '%s'" % ( - self.model._meta.object_name, self.model._meta.swapped - )) + raise AttributeError( + "Manager isn't available; '%s.%s' has been swapped for '%s'" % ( + self.model._meta.app_label, + self.model._meta.object_name, + self.model._meta.swapped, + ) + ) class EmptyManager(Manager): diff --git a/tests/managers_regress/tests.py b/tests/managers_regress/tests.py index 6f70314cb7..c83c40055f 100644 --- a/tests/managers_regress/tests.py +++ b/tests/managers_regress/tests.py @@ -109,12 +109,12 @@ class ManagersRegressionTests(TestCase): # Accessing the manager on a swappable model should # raise an attribute error with a helpful message - try: + msg = ( + "Manager isn't available; 'managers_regress.SwappableModel' " + "has been swapped for 'managers_regress.Parent'" + ) + with self.assertRaisesMessage(AttributeError, msg): SwappableModel.objects.all() - self.fail('Should raise an AttributeError') - except AttributeError as e: - self.assertEqual(str(e), "Manager isn't available; SwappableModel has been swapped for 'managers_regress.Parent'") - finally: apps.app_configs['managers_regress'].models = _old_models apps.all_models['managers_regress'] = _old_models @@ -128,7 +128,6 @@ class ManagersRegressionTests(TestCase): try: class SwappableModel(models.Model): - stuff = models.Manager() class Meta: @@ -137,12 +136,12 @@ class ManagersRegressionTests(TestCase): # Accessing the manager on a swappable model with an # explicit manager should raise an attribute error with a # helpful message - try: + msg = ( + "Manager isn't available; 'managers_regress.SwappableModel' " + "has been swapped for 'managers_regress.Parent'" + ) + with self.assertRaisesMessage(AttributeError, msg): SwappableModel.stuff.all() - self.fail('Should raise an AttributeError') - except AttributeError as e: - self.assertEqual(str(e), "Manager isn't available; SwappableModel has been swapped for 'managers_regress.Parent'") - finally: apps.app_configs['managers_regress'].models = _old_models apps.all_models['managers_regress'] = _old_models @@ -156,7 +155,6 @@ class ManagersRegressionTests(TestCase): try: class SwappableModel(models.Model): - objects = models.Manager() class Meta: @@ -165,12 +163,12 @@ class ManagersRegressionTests(TestCase): # Accessing the manager on a swappable model with an # explicit manager should raise an attribute error with a # helpful message - try: + msg = ( + "Manager isn't available; 'managers_regress.SwappableModel' " + "has been swapped for 'managers_regress.Parent'" + ) + with self.assertRaisesMessage(AttributeError, msg): SwappableModel.objects.all() - self.fail('Should raise an AttributeError') - except AttributeError as e: - self.assertEqual(str(e), "Manager isn't available; SwappableModel has been swapped for 'managers_regress.Parent'") - finally: apps.app_configs['managers_regress'].models = _old_models apps.all_models['managers_regress'] = _old_models