summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/postgresql/compiler.py2
-rw-r--r--tests/postgres_tests/migrations/0002_create_test_models.py22
-rw-r--r--tests/postgres_tests/models.py4
-rw-r--r--tests/postgres_tests/test_array.py11
4 files changed, 38 insertions, 1 deletions
diff --git a/django/db/backends/postgresql/compiler.py b/django/db/backends/postgresql/compiler.py
index 2394d90f55..3b972b5ba5 100644
--- a/django/db/backends/postgresql/compiler.py
+++ b/django/db/backends/postgresql/compiler.py
@@ -43,7 +43,7 @@ class SQLInsertCompiler(BaseSQLInsertCompiler):
db_types = [field.db_type(self.connection) for field in fields]
# Abort if any of the fields are arrays as UNNEST indiscriminately
# flatten them instead of reducing their nesting by one.
- if any(db_type.endswith("[]") for db_type in db_types):
+ if any(db_type.endswith("]") for db_type in db_types):
return super().assemble_as_sql(fields, value_rows)
return InsertUnnest(["(%%s)::%s[]" % db_type for db_type in db_types]), [
list(map(list, zip(*value_rows)))
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py
index 188f79607d..31705ae21a 100644
--- a/tests/postgres_tests/migrations/0002_create_test_models.py
+++ b/tests/postgres_tests/migrations/0002_create_test_models.py
@@ -168,6 +168,28 @@ class Migration(migrations.Migration):
bases=(models.Model,),
),
migrations.CreateModel(
+ name="WithSizeArrayModel",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ verbose_name="ID",
+ serialize=False,
+ auto_created=True,
+ primary_key=True,
+ ),
+ ),
+ (
+ "field",
+ ArrayField(models.FloatField(), size=2, null=True, blank=True),
+ ),
+ ],
+ options={
+ "required_db_vendor": "postgresql",
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
name="NullableIntegerArrayModel",
fields=[
(
diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py
index e3118bc590..1563f6a35d 100644
--- a/tests/postgres_tests/models.py
+++ b/tests/postgres_tests/models.py
@@ -64,6 +64,10 @@ class DateTimeArrayModel(PostgreSQLModel):
times = ArrayField(models.TimeField())
+class WithSizeArrayModel(PostgreSQLModel):
+ field = ArrayField(models.FloatField(), size=3)
+
+
class NestedIntegerArrayModel(PostgreSQLModel):
field = ArrayField(ArrayField(models.IntegerField()))
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index d930a01a1d..9ad4ec16e9 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -28,6 +28,7 @@ from .models import (
OtherTypesArrayModel,
PostgreSQLModel,
Tag,
+ WithSizeArrayModel,
)
try:
@@ -216,6 +217,16 @@ class TestQuerying(PostgreSQLTestCase):
]
)
+ def test_bulk_create_with_sized_arrayfield(self):
+ objs = WithSizeArrayModel.objects.bulk_create(
+ [
+ WithSizeArrayModel(field=[1, 2]),
+ WithSizeArrayModel(field=[3, 4]),
+ ]
+ )
+ self.assertEqual(objs[0].field, [1, 2])
+ self.assertEqual(objs[1].field, [3, 4])
+
def test_empty_list(self):
NullableIntegerArrayModel.objects.create(field=[])
obj = (