diff -r 6641e941ef1e -r ff1a9aa48cfd app/django/db/models/manager.py --- a/app/django/db/models/manager.py Tue Oct 14 12:36:55 2008 +0000 +++ b/app/django/db/models/manager.py Tue Oct 14 16:00:59 2008 +0000 @@ -1,11 +1,10 @@ import copy from django.db.models.query import QuerySet, EmptyQuerySet, insert_query -from django.dispatch import dispatcher from django.db.models import signals from django.db.models.fields import FieldDoesNotExist -def ensure_default_manager(sender): +def ensure_default_manager(sender, **kwargs): cls = sender if not getattr(cls, '_default_manager', None) and not cls._meta.abstract: # Create the default manager, if needed. @@ -16,7 +15,7 @@ pass cls.add_to_class('objects', Manager()) -dispatcher.connect(ensure_default_manager, signal=signals.class_prepared) +signals.class_prepared.connect(ensure_default_manager) class Manager(object): # Tracks each time a Manager instance is created. Used to retain order. @@ -24,10 +23,9 @@ def __init__(self): super(Manager, self).__init__() - # Increase the creation counter, and save our local copy. - self.creation_counter = Manager.creation_counter - Manager.creation_counter += 1 + self._set_creation_counter() self.model = None + self._inherited = False def contribute_to_class(self, model, name): # TODO: Use weakref because of possible memory leak / circular reference. @@ -35,6 +33,17 @@ setattr(model, name, ManagerDescriptor(self)) if not getattr(model, '_default_manager', None) or self.creation_counter < model._default_manager.creation_counter: model._default_manager = self + if model._meta.abstract or self._inherited: + model._meta.abstract_managers.append((self.creation_counter, name, + self)) + + def _set_creation_counter(self): + """ + Sets the creation counter value for this instance and increments the + class-level copy. + """ + self.creation_counter = Manager.creation_counter + Manager.creation_counter += 1 def _copy_to_model(self, model): """ @@ -44,7 +53,9 @@ """ assert issubclass(model, self.model) mgr = copy.copy(self) + mgr._set_creation_counter() mgr.model = model + mgr._inherited = True return mgr #######################