diff options
author | Hans Aarne Liblik <Hans.Liblik@gmail.com> | 2020-02-28 08:50:24 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-02-28 12:56:03 +0100 |
commit | a21f7b91db273a03abfb47b0580bb39e0043c99a (patch) | |
tree | 08b6590be6b539e8f9d42f943bdfd4e4adfa2c73 /tests/bulk_create | |
parent | 8b30360322d4de6687e17ab267a856db4e3c78a6 (diff) | |
download | django-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.py | 11 | ||||
-rw-r--r-- | tests/bulk_create/tests.py | 14 |
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: |