--- 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
#######################