summaryrefslogtreecommitdiff
path: root/tests/bulk_create
diff options
context:
space:
mode:
authorHans Aarne Liblik <Hans.Liblik@gmail.com>2020-02-28 08:50:24 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-02-28 12:56:03 +0100
commita21f7b91db273a03abfb47b0580bb39e0043c99a (patch)
tree08b6590be6b539e8f9d42f943bdfd4e4adfa2c73 /tests/bulk_create
parent8b30360322d4de6687e17ab267a856db4e3c78a6 (diff)
downloaddjango-a21f7b91db273a03abfb47b0580bb39e0043c99a.tar.gz
Fixed #31301 -- Fixed crash of QuerySet.bulk_create() with mixed empty and set ForeignKeys to AutoFields on Oracle.
Diffstat (limited to 'tests/bulk_create')
-rw-r--r--tests/bulk_create/models.py11
-rw-r--r--tests/bulk_create/tests.py14
2 files changed, 21 insertions, 4 deletions
diff --git a/tests/bulk_create/models.py b/tests/bulk_create/models.py
index 87203ac4f3..9bde8a3976 100644
--- a/tests/bulk_create/models.py
+++ b/tests/bulk_create/models.py
@@ -64,6 +64,14 @@ class NoFields(models.Model):
pass
+class SmallAutoFieldModel(models.Model):
+ id = models.SmallAutoField(primary_key=True)
+
+
+class BigAutoFieldModel(models.Model):
+ id = models.BigAutoField(primary_key=True)
+
+
class NullableFields(models.Model):
# Fields in db.backends.oracle.BulkInsertMapper
big_int_filed = models.BigIntegerField(null=True, default=1)
@@ -81,6 +89,9 @@ class NullableFields(models.Model):
positive_small_integer_field = models.PositiveSmallIntegerField(null=True, default=4)
small_integer_field = models.SmallIntegerField(null=True, default=5)
time_field = models.TimeField(null=True, default=timezone.now)
+ auto_field = models.ForeignKey(NoFields, on_delete=models.CASCADE, null=True)
+ small_auto_field = models.ForeignKey(SmallAutoFieldModel, on_delete=models.CASCADE, null=True)
+ big_auto_field = models.ForeignKey(BigAutoFieldModel, on_delete=models.CASCADE, null=True)
# Fields not required in BulkInsertMapper
char_field = models.CharField(null=True, max_length=4, default='char')
email_field = models.EmailField(null=True, default='user@example.com')
diff --git a/tests/bulk_create/tests.py b/tests/bulk_create/tests.py
index 2fd9801d35..ff89bcb1dd 100644
--- a/tests/bulk_create/tests.py
+++ b/tests/bulk_create/tests.py
@@ -9,9 +9,9 @@ from django.test import (
)
from .models import (
- Country, NoFields, NullableFields, Pizzeria, ProxyCountry,
- ProxyMultiCountry, ProxyMultiProxyCountry, ProxyProxyCountry, Restaurant,
- State, TwoFields,
+ BigAutoFieldModel, Country, NoFields, NullableFields, Pizzeria,
+ ProxyCountry, ProxyMultiCountry, ProxyMultiProxyCountry, ProxyProxyCountry,
+ Restaurant, SmallAutoFieldModel, State, TwoFields,
)
@@ -234,10 +234,16 @@ class BulkCreateTests(TestCase):
@skipUnlessDBFeature('has_bulk_insert')
def test_bulk_insert_nullable_fields(self):
+ fk_to_auto_fields = {
+ 'auto_field': NoFields.objects.create(),
+ 'small_auto_field': SmallAutoFieldModel.objects.create(),
+ 'big_auto_field': BigAutoFieldModel.objects.create(),
+ }
# NULL can be mixed with other values in nullable fields
nullable_fields = [field for field in NullableFields._meta.get_fields() if field.name != 'id']
NullableFields.objects.bulk_create([
- NullableFields(**{field.name: None}) for field in nullable_fields
+ NullableFields(**{**fk_to_auto_fields, field.name: None})
+ for field in nullable_fields
])
self.assertEqual(NullableFields.objects.count(), len(nullable_fields))
for field in nullable_fields: