diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2009-12-21 02:38:38 +0000 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2009-12-21 02:38:38 +0000 |
commit | 4424a8d3d8ec0b3e6f7e4b15a0d5fa73b3e7b63f (patch) | |
tree | 3a22dfe9801e98547d6fd12e6b42e56ff82c7c7f /django/db/models | |
parent | 8da7538b18bbb7a96a32cd01d71a70ef980308d4 (diff) | |
download | django-4424a8d3d8ec0b3e6f7e4b15a0d5fa73b3e7b63f.tar.gz |
[soc2009/multidb] Correct the handling of raw and defered fields with multi-db.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@11926 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models')
-rw-r--r-- | django/db/models/manager.py | 1 | ||||
-rw-r--r-- | django/db/models/query.py | 8 | ||||
-rw-r--r-- | django/db/models/query_utils.py | 2 | ||||
-rw-r--r-- | django/db/models/sql/query.py | 2 |
4 files changed, 9 insertions, 4 deletions
diff --git a/django/db/models/manager.py b/django/db/models/manager.py index 86977fa9c2..cd03ee9146 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -200,6 +200,7 @@ class Manager(object): return self.get_query_set()._update(values, **kwargs) def raw(self, query, params=None, *args, **kwargs): + kwargs["using"] = self.db return RawQuerySet(model=self.model, query=query, params=params, *args, **kwargs) class ManagerDescriptor(object): diff --git a/django/db/models/query.py b/django/db/models/query.py index f67e9fb288..73b514c13a 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1154,9 +1154,11 @@ class RawQuerySet(object): Provides an iterator which converts the results of raw SQL queries into annotated model instances. """ - def __init__(self, query, model=None, query_obj=None, params=None, translations=None): + def __init__(self, query, model=None, query_obj=None, params=None, + translations=None, using=None): self.model = model - self.query = query_obj or sql.RawQuery(sql=query, connection=connection, params=params) + self.using = using + self.query = query_obj or sql.RawQuery(sql=query, connection=connections[using], params=params) self.params = params or () self.translations = translations or {} @@ -1230,6 +1232,8 @@ class RawQuerySet(object): for field, value in annotations: setattr(instance, field, value) + + instance._state.db = self.using return instance diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 74bc66d35d..9f6083ce7e 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -187,7 +187,7 @@ class DeferredAttribute(object): cls = self.model_ref() data = instance.__dict__ if data.get(self.field_name, self) is self: - data[self.field_name] = cls._base_manager.filter(pk=instance.pk).values_list(self.field_name, flat=True).get() + data[self.field_name] = cls._base_manager.filter(pk=instance.pk).values_list(self.field_name, flat=True).using(instance._state.db).get() return data[self.field_name] def __set__(self, instance, value): diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 568eaf915f..dec39451a6 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -11,7 +11,7 @@ from django.utils.copycompat import deepcopy from django.utils.tree import Node from django.utils.datastructures import SortedDict from django.utils.encoding import force_unicode -from django.db import connection, connections, DEFAULT_DB_ALIAS +from django.db import connections, DEFAULT_DB_ALIAS from django.db.models import signals from django.db.models.fields import FieldDoesNotExist from django.db.models.query_utils import select_related_descend, InvalidQuery |