summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Demboski <ben@joltlabs.com>2016-06-20 14:52:14 -0700
committerTim Graham <timograham@gmail.com>2016-06-27 13:33:37 -0400
commit2224a56631eae3342993e4b7b90e80f59a167151 (patch)
treeda594ff9151126d137ffe2aca7ef2424b41443c6
parent03f6d272abe12a0d5c915253efb5de99583d2413 (diff)
Fixed #26784 -- Made ForeignKey.validate() pass `model` to router if model_instance=None.
-rw-r--r--django/db/models/fields/related.py2
-rw-r--r--tests/multiple_database/tests.py11
2 files changed, 12 insertions, 1 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 0639bf3d79..d7b61f9a5a 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -926,7 +926,7 @@ class ForeignKey(ForeignObject):
if value is None:
return
- using = router.db_for_read(model_instance.__class__, instance=model_instance)
+ using = router.db_for_read(self.remote_field.model, instance=model_instance)
qs = self.remote_field.model._default_manager.using(using).filter(
**{self.remote_field.field_name: value}
)
diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py
index 763f92777a..5d30cee891 100644
--- a/tests/multiple_database/tests.py
+++ b/tests/multiple_database/tests.py
@@ -586,6 +586,17 @@ class QueryTestCase(TestCase):
pluto = Pet.objects.using('other').create(name="Pluto", owner=mickey)
self.assertIsNone(pluto.full_clean())
+ # Any router that accesses `model` in db_for_read() works here.
+ @override_settings(DATABASE_ROUTERS=[AuthRouter()])
+ def test_foreign_key_validation_with_router(self):
+ """
+ ForeignKey.validate() passes `model` to db_for_read() even if
+ model_instance=None.
+ """
+ mickey = Person.objects.create(name="Mickey")
+ owner_field = Pet._meta.get_field('owner')
+ self.assertEqual(owner_field.clean(mickey.pk, None), mickey.pk)
+
def test_o2o_separation(self):
"OneToOne fields are constrained to a single database"
# Create a user and profile on the default database