diff --git a/eav/registry.py b/eav/registry.py index 19b80ae..351ac25 100644 --- a/eav/registry.py +++ b/eav/registry.py @@ -109,8 +109,13 @@ class Registry(object): # Save the old manager if the attribute name conflicts with the new one. if hasattr(self.model_cls, self.config_cls.manager_attr): mgr = getattr(self.model_cls, self.config_cls.manager_attr) - self.config_cls.old_mgr = mgr - self.model_cls._meta.local_managers.remove(mgr) + + # For some models, `local_managers` may be empty, eg. + # django.contrib.auth.models.User and AbstractUser + if mgr in self.model_cls._meta.local_managers: + self.config_cls.old_mgr = mgr + self.model_cls._meta.local_managers.remove(mgr) + self.model_cls._meta._expire_cache() # Attach the new manager to the model. diff --git a/tests/test_registry.py b/tests/test_registry.py index b318e5d..877e568 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -1,3 +1,4 @@ +from django.contrib.auth.models import User from django.test import TestCase import eav @@ -100,3 +101,14 @@ class RegistryTests(TestCase): @eav.decorators.register_eav() class Foo(object): pass + + def test_model_without_local_managers(self): + """Test when a model doesn't have local_managers.""" + # Check just in case test model changes in the future + assert bool(User._meta.local_managers) is False + eav.register(User) + assert isinstance(User.objects, eav.managers.EntityManager) + + # Reverse check: managers should be empty again + eav.unregister(User) + assert bool(User._meta.local_managers) is False