Changeset 7339
- Timestamp:
- 03/20/08 11:10:51 (8 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/queryset-refactor/django/db/models/base.py
r7249 r7339 4 4 from itertools import izip 5 5 6 import django.db.models.manipulators 7 import django.db.models.manager 6 import django.db.models.manipulators # Imported to register signal handler. 7 import django.db.models.manager # Ditto. 8 8 from django.core import validators 9 9 from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError … … 60 60 new_class._meta.get_latest_by = base_meta.get_latest_by 61 61 62 if getattr(new_class, '_default_manager', None) is not None: 63 # We have a parent who set the default manager. We need to override 64 # this. 62 old_default_mgr = None 63 if getattr(new_class, '_default_manager', None): 64 # We have a parent who set the default manager. 65 if new_class._default_manager.model._meta.abstract: 66 old_default_mgr = new_class._default_manager 65 67 new_class._default_manager = None 66 68 if getattr(new_class._meta, 'app_label', None) is None: … … 114 116 return new_class 115 117 118 if old_default_mgr and not new_class._default_manager: 119 new_class._default_manager = old_default_mgr._copy_to_model(new_class) 116 120 new_class._prepare() 117 121 register_models(new_class._meta.app_label, new_class) django/branches/queryset-refactor/django/db/models/manager.py
r7249 r7339 1 import copy 2 1 3 from django.db.models.query import QuerySet, EmptyQuerySet, insert_query 2 4 from django.dispatch import dispatcher … … 6 8 def ensure_default_manager(sender): 7 9 cls = sender 8 if not hasattr(cls, '_default_manager') or cls._default_manager is None:10 if not getattr(cls, '_default_manager', None) and not cls._meta.abstract: 9 11 # Create the default manager, if needed. 10 12 try: … … 32 34 self.model = model 33 35 setattr(model, name, ManagerDescriptor(self)) 34 if not hasattr(model, '_default_manager') or model._default_manager is Noneor self.creation_counter < model._default_manager.creation_counter:36 if not getattr(model, '_default_manager', None) or self.creation_counter < model._default_manager.creation_counter: 35 37 model._default_manager = self 38 39 def _copy_to_model(self, model): 40 """ 41 Makes a copy of the manager and assigns it to 'model', which should be 42 a child of the existing model (used when inheriting a manager from an 43 abstract base class). 44 """ 45 assert issubclass(model, self.model) 46 mgr = copy.copy(self) 47 mgr.model = model 48 return mgr 36 49 37 50 #######################
