web/lib/django/db/models/manager.py
changeset 29 cc9b7e14412b
parent 0 0d40e90630ef
--- 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):