diff options
author | Stefan R. Filipek <srfilipek@gmail.com> | 2018-05-10 20:42:44 -0400 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-05-10 20:42:44 -0400 |
commit | a5a2ceeb453b86caaf01687342984f372428beb8 (patch) | |
tree | 487d4dcbc5122d74adc0f5a99657e2ac329a594e /tests/multiple_database | |
parent | 9c4ea63e878c053600c284e32d5f32d27a59b63a (diff) | |
download | django-a5a2ceeb453b86caaf01687342984f372428beb8.tar.gz |
Fixed #27629 -- Added router.allow_relation() calls for assignments between unsaved model instances.
Diffstat (limited to 'tests/multiple_database')
-rw-r--r-- | tests/multiple_database/tests.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py index 6dd44f6475..e4cef8cdb9 100644 --- a/tests/multiple_database/tests.py +++ b/tests/multiple_database/tests.py @@ -2082,3 +2082,28 @@ class RouteForWriteTestCase(TestCase): self.assertEqual(e.mode, RouterUsed.WRITE) self.assertEqual(e.model, Book) self.assertEqual(e.hints, {'instance': auth}) + + +class NoRelationRouter: + """Disallow all relations.""" + def allow_relation(self, obj1, obj2, **hints): + return False + + +@override_settings(DATABASE_ROUTERS=[NoRelationRouter()]) +class RelationAssignmentTests(TestCase): + """allow_relation() is called with unsaved model instances.""" + multi_db = True + router_prevents_msg = 'the current database router prevents this relation' + + def test_foreign_key_relation(self): + person = Person(name='Someone') + pet = Pet() + with self.assertRaisesMessage(ValueError, self.router_prevents_msg): + pet.owner = person + + def test_reverse_one_to_one_relation(self): + user = User(username='Someone', password='fake_hash') + profile = UserProfile() + with self.assertRaisesMessage(ValueError, self.router_prevents_msg): + user.userprofile = profile |