summaryrefslogtreecommitdiff
path: root/tests/bulk_create
diff options
context:
space:
mode:
authorHannes Ljungberg <hannes.ljungberg@gmail.com>2020-10-22 16:50:37 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-10-26 12:00:34 +0100
commit10f8b82d195caa3745ba37d9424893763f89653e (patch)
tree09310b166ce3b3ba92be41f039c229c587be0f43 /tests/bulk_create
parent83a8da576dc6ccd6986e6426a308b69b9639b818 (diff)
downloaddjango-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.py26
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)])