Author: Alex
Date: 2009-12-20 20:38:38 -0600 (Sun, 20 Dec 2009)
New Revision: 11926
Modified:
django/branches/soc2009/multidb/django/db/models/manager.py
django/branches/soc2009/multidb/django/db/models/query.py
django/branches/soc2009/multidb/django/db/models/query_utils.py
django/branches/soc2009/multidb/django/db/models/sql/query.py
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
Log:
[soc2009/multidb] Correct the handling of raw and defered fields with multi-db.
Modified: django/branches/soc2009/multidb/django/db/models/manager.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/manager.py 2009-12-21
02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/manager.py 2009-12-21
02:38:38 UTC (rev 11926)
@@ -200,6 +200,7 @@
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):
Modified: django/branches/soc2009/multidb/django/db/models/query.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/query.py 2009-12-21
02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/query.py 2009-12-21
02:38:38 UTC (rev 11926)
@@ -1154,9 +1154,11 @@
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 @@
for field, value in annotations:
setattr(instance, field, value)
+
+ instance._state.db = self.using
return instance
Modified: django/branches/soc2009/multidb/django/db/models/query_utils.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/query_utils.py
2009-12-21 02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/query_utils.py
2009-12-21 02:38:38 UTC (rev 11926)
@@ -187,7 +187,7 @@
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):
Modified: django/branches/soc2009/multidb/django/db/models/sql/query.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/sql/query.py
2009-12-21 02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/sql/query.py
2009-12-21 02:38:38 UTC (rev 11926)
@@ -11,7 +11,7 @@
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
Modified:
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
===================================================================
---
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
2009-12-21 02:01:24 UTC (rev 11925)
+++
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
2009-12-21 02:38:38 UTC (rev 11926)
@@ -619,6 +619,13 @@
self.assertEquals(learn.get_next_by_published().title, "Dive into
Python")
self.assertEquals(dive.get_previous_by_published().title, "Learning
Python")
+
+ def test_raw(self):
+ "test the raw() method across databases"
+ dive = Book.objects.using('other').create(title="Dive into Python",
+ published=datetime.date(2009, 5, 4))
+ val = Book.objects.db_manager("other").raw('SELECT id FROM
"multiple_database_book"')
+ self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
class UserProfileTestCase(TestCase):
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.