--- a/web/lib/django/db/models/manager.py Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/manager.py Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,11 @@
-import copy
-
-from django.db.models.query import QuerySet, EmptyQuerySet, insert_query
+from django.utils import copycompat as copy
+from django.conf import settings
+from django.db import router
+from django.db.models.query import QuerySet, EmptyQuerySet, insert_query, RawQuerySet
from django.db.models import signals
from django.db.models.fields import FieldDoesNotExist
+
def ensure_default_manager(sender, **kwargs):
"""
Ensures that a Model subclass contains a default manager and sets the
@@ -18,7 +20,7 @@
# Create the default manager, if needed.
try:
cls._meta.get_field('objects')
- raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__
+ raise ValueError("Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__)
except FieldDoesNotExist:
pass
cls.add_to_class('objects', Manager())
@@ -50,6 +52,7 @@
self._set_creation_counter()
self.model = None
self._inherited = False
+ self._db = None
def contribute_to_class(self, model, name):
# TODO: Use weakref because of possible memory leak / circular reference.
@@ -85,18 +88,27 @@
mgr._inherited = True
return mgr
+ def db_manager(self, using):
+ obj = copy.copy(self)
+ obj._db = using
+ return obj
+
+ @property
+ def db(self):
+ return self._db or router.db_for_read(self.model)
+
#######################
# PROXIES TO QUERYSET #
#######################
def get_empty_query_set(self):
- return EmptyQuerySet(self.model)
+ return EmptyQuerySet(self.model, using=self._db)
def get_query_set(self):
"""Returns a new QuerySet object. Subclasses can override this method
to easily customize the behavior of the Manager.
"""
- return QuerySet(self.model)
+ return QuerySet(self.model, using=self._db)
def none(self):
return self.get_empty_query_set()
@@ -173,12 +185,21 @@
def only(self, *args, **kwargs):
return self.get_query_set().only(*args, **kwargs)
+ def using(self, *args, **kwargs):
+ return self.get_query_set().using(*args, **kwargs)
+
+ def exists(self, *args, **kwargs):
+ return self.get_query_set().exists(*args, **kwargs)
+
def _insert(self, values, **kwargs):
return insert_query(self.model, values, **kwargs)
def _update(self, values, **kwargs):
return self.get_query_set()._update(values, **kwargs)
+ def raw(self, raw_query, params=None, *args, **kwargs):
+ return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
+
class ManagerDescriptor(object):
# This class ensures managers aren't accessible via model instances.
# For example, Poll.objects works, but poll_obj.objects raises AttributeError.
@@ -187,7 +208,7 @@
def __get__(self, instance, type=None):
if instance != None:
- raise AttributeError, "Manager isn't accessible via %s instances" % type.__name__
+ raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
return self.manager
class EmptyManager(Manager):