diff options
| author | Clifford Gama <cliffygamy@gmail.com> | 2025-10-21 11:34:58 +0200 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2025-10-29 15:00:52 -0400 |
| commit | be7f68422d4c6ae568a17f1fa91aac67d284df82 (patch) | |
| tree | ff051b66bd991593959d3dd4d39e7e3d71a95ba0 /django/contrib/postgres/fields/array.py | |
| parent | adc25a9a6696f7e2ab6181aabce3a23e027d6703 (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.py | 5 |
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": |
