diff options
author | Hannes Ljungberg <hannes.ljungberg@gmail.com> | 2020-10-22 16:50:37 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-10-26 12:00:34 +0100 |
commit | 10f8b82d195caa3745ba37d9424893763f89653e (patch) | |
tree | 09310b166ce3b3ba92be41f039c229c587be0f43 /tests/bulk_create | |
parent | 83a8da576dc6ccd6986e6426a308b69b9639b818 (diff) | |
download | django-10f8b82d195caa3745ba37d9424893763f89653e.tar.gz |
Fixed #29497 -- Fixed loss of assigned parent when saving child with bulk_create() after parent.
Diffstat (limited to 'tests/bulk_create')
-rw-r--r-- | tests/bulk_create/tests.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/bulk_create/tests.py b/tests/bulk_create/tests.py index 2b1d901e31..df764f945f 100644 --- a/tests/bulk_create/tests.py +++ b/tests/bulk_create/tests.py @@ -321,3 +321,29 @@ class BulkCreateTests(TestCase): # Without ignore_conflicts=True, there's a problem. with self.assertRaises(IntegrityError): TwoFields.objects.bulk_create(conflicting_objects) + + def test_nullable_fk_after_parent(self): + parent = NoFields() + child = NullableFields(auto_field=parent, integer_field=88) + parent.save() + NullableFields.objects.bulk_create([child]) + child = NullableFields.objects.get(integer_field=88) + self.assertEqual(child.auto_field, parent) + + @skipUnlessDBFeature('can_return_rows_from_bulk_insert') + def test_nullable_fk_after_parent_bulk_create(self): + parent = NoFields() + child = NullableFields(auto_field=parent, integer_field=88) + NoFields.objects.bulk_create([parent]) + NullableFields.objects.bulk_create([child]) + child = NullableFields.objects.get(integer_field=88) + self.assertEqual(child.auto_field, parent) + + def test_unsaved_parent(self): + parent = NoFields() + msg = ( + "bulk_create() prohibited to prevent data loss due to unsaved " + "related object 'auto_field'." + ) + with self.assertRaisesMessage(ValueError, msg): + NullableFields.objects.bulk_create([NullableFields(auto_field=parent)]) |