summaryrefslogtreecommitdiff
path: root/django/contrib/postgres/fields/array.py
diff options
context:
space:
mode:
authorClifford Gama <cliffygamy@gmail.com>2025-10-21 11:34:58 +0200
committerJacob Walls <jacobtylerwalls@gmail.com>2025-10-29 15:00:52 -0400
commitbe7f68422d4c6ae568a17f1fa91aac67d284df82 (patch)
treeff051b66bd991593959d3dd4d39e7e3d71a95ba0 /django/contrib/postgres/fields/array.py
parentadc25a9a6696f7e2ab6181aabce3a23e027d6703 (diff)
Refs #35381 -- Delegated ArrayField element prepping to base_field.get_db_prep_save.
Previously, ArrayField always used base_field.get_db_prep_value when saving, which could differ from how base_field prepares data for save. This change overrides ArrayField.get_db_prep_save to delegate to the base_field's get_db_prep_save, ensuring elements like None in JSONField arrays are saved correctly as SQL NULL instead of JSON null.
Diffstat (limited to 'django/contrib/postgres/fields/array.py')
-rw-r--r--django/contrib/postgres/fields/array.py5
1 files changed, 5 insertions, 0 deletions
diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py
index 078428416c..a76598a9bf 100644
--- a/django/contrib/postgres/fields/array.py
+++ b/django/contrib/postgres/fields/array.py
@@ -135,6 +135,11 @@ class ArrayField(CheckPostgresInstalledMixin, CheckFieldDefaultMixin, Field):
]
return value
+ def get_db_prep_save(self, value, connection):
+ if isinstance(value, (list, tuple)):
+ return [self.base_field.get_db_prep_save(i, connection) for i in value]
+ return value
+
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
if path == "django.contrib.postgres.fields.array.ArrayField":