summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2010-11-16 22:17:51 +0000
committerRamiro Morales <cramm0@gmail.com>2010-11-16 22:17:51 +0000
commit746ce7d9678c91ab6b811a5c4693b84ea56d64ee (patch)
tree695fd8d537a7b128bf64312d2a400ef9d6398eea
parent6ff1f386467cccaadd1d09dc7d7b8881ccb1389a (diff)
[1.2.X] Fixed #14691 -- Made ForeignKey.validate() use the right database. Thanks Marco Paolini for the report.
Backport of [14580] from trunk git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14581 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/fields/related.py5
-rw-r--r--tests/regressiontests/multiple_database/tests.py6
2 files changed, 10 insertions, 1 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 079b321692..8d08230267 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -829,7 +829,10 @@ class ForeignKey(RelatedField, Field):
if value is None:
return
- qs = self.rel.to._default_manager.filter(**{self.rel.field_name:value})
+ using = router.db_for_read(model_instance.__class__, instance=model_instance)
+ qs = self.rel.to._default_manager.using(using).filter(
+ **{self.rel.field_name: value}
+ )
qs = qs.complex_filter(self.rel.limit_choices_to)
if not qs.exists():
raise exceptions.ValidationError(self.error_messages['invalid'] % {
diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py
index 784181aae2..05dca2662d 100644
--- a/tests/regressiontests/multiple_database/tests.py
+++ b/tests/regressiontests/multiple_database/tests.py
@@ -580,6 +580,12 @@ class QueryTestCase(TestCase):
self.assertEquals(Person.objects.using('other').count(), 0)
self.assertEquals(Pet.objects.using('other').count(), 0)
+ def test_foreign_key_validation(self):
+ "ForeignKey.validate() uses the correct database"
+ mickey = Person.objects.using('other').create(name="Mickey")
+ pluto = Pet.objects.using('other').create(name="Pluto", owner=mickey)
+ self.assertEquals(None, pluto.full_clean())
+
def test_o2o_separation(self):
"OneToOne fields are constrained to a single database"
# Create a user and profile on the default database