diff options
| author | Anubhav Joshi <anubhav9042@gmail.com> | 2014-05-19 14:15:55 +0530 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-06-05 13:12:01 -0400 |
| commit | 5643a3b51be338196d0b292d5626ad43648448d3 (patch) | |
| tree | 70651b23bb39652b9ffb869281a77bfaaf9badbb /tests/multiple_database/tests.py | |
| parent | 4f72e5f03ae803fd9faa1445245c1050ca004526 (diff) | |
Fixed #10811 -- Made assigning unsaved objects to FK, O2O, and GFK raise ValueError.
This prevents silent data loss.
Thanks Aymeric Augustin for the initial patch and Loic Bistuer for the review.
Diffstat (limited to 'tests/multiple_database/tests.py')
| -rw-r--r-- | tests/multiple_database/tests.py | 51 |
1 files changed, 1 insertions, 50 deletions
diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py index f3b540e31a..88da4072ae 100644 --- a/tests/multiple_database/tests.py +++ b/tests/multiple_database/tests.py @@ -476,8 +476,6 @@ class QueryTestCase(TestCase): dive = Book.objects.using('other').create(title="Dive into Python", published=datetime.date(2009, 5, 4)) - mark = Person.objects.using('other').create(name="Mark Pilgrim") - # Set a foreign key with an object from a different database with self.assertRaises(ValueError): dive.editor = marty @@ -492,54 +490,6 @@ class QueryTestCase(TestCase): with transaction.atomic(using='default'): marty.edited.add(dive) - # BUT! if you assign a FK object when the base object hasn't - # been saved yet, you implicitly assign the database for the - # base object. - chris = Person(name="Chris Mills") - html5 = Book(title="Dive into HTML5", published=datetime.date(2010, 3, 15)) - # initially, no db assigned - self.assertEqual(chris._state.db, None) - self.assertEqual(html5._state.db, None) - - # old object comes from 'other', so the new object is set to use 'other'... - dive.editor = chris - html5.editor = mark - self.assertEqual(chris._state.db, 'other') - self.assertEqual(html5._state.db, 'other') - # ... but it isn't saved yet - self.assertEqual(list(Person.objects.using('other').values_list('name', flat=True)), - ['Mark Pilgrim']) - self.assertEqual(list(Book.objects.using('other').values_list('title', flat=True)), - ['Dive into Python']) - - # When saved (no using required), new objects goes to 'other' - chris.save() - html5.save() - self.assertEqual(list(Person.objects.using('default').values_list('name', flat=True)), - ['Marty Alchin']) - self.assertEqual(list(Person.objects.using('other').values_list('name', flat=True)), - ['Chris Mills', 'Mark Pilgrim']) - self.assertEqual(list(Book.objects.using('default').values_list('title', flat=True)), - ['Pro Django']) - self.assertEqual(list(Book.objects.using('other').values_list('title', flat=True)), - ['Dive into HTML5', 'Dive into Python']) - - # This also works if you assign the FK in the constructor - water = Book(title="Dive into Water", published=datetime.date(2001, 1, 1), editor=mark) - self.assertEqual(water._state.db, 'other') - # ... but it isn't saved yet - self.assertEqual(list(Book.objects.using('default').values_list('title', flat=True)), - ['Pro Django']) - self.assertEqual(list(Book.objects.using('other').values_list('title', flat=True)), - ['Dive into HTML5', 'Dive into Python']) - - # When saved, the new book goes to 'other' - water.save() - self.assertEqual(list(Book.objects.using('default').values_list('title', flat=True)), - ['Pro Django']) - self.assertEqual(list(Book.objects.using('other').values_list('title', flat=True)), - ['Dive into HTML5', 'Dive into Python', 'Dive into Water']) - def test_foreign_key_deletion(self): "Cascaded deletions of Foreign Key relations issue queries on the right database" mark = Person.objects.using('other').create(name="Mark Pilgrim") @@ -1148,6 +1098,7 @@ class RouterTestCase(TestCase): # old object comes from 'other', so the new object is set to use the # source of 'other'... self.assertEqual(dive._state.db, 'other') + chris.save() dive.editor = chris html5.editor = mark |
