diff --git a/django_mongodb_backend/operations.py b/django_mongodb_backend/operations.py index 578429a2c..df2b824aa 100644 --- a/django_mongodb_backend/operations.py +++ b/django_mongodb_backend/operations.py @@ -80,6 +80,8 @@ def adapt_timefield_value(self, value): def _get_arrayfield_converter(self, converter, *args, **kwargs): # Return a database converter that can be applied to a list of values. def convert_value(value, expression, connection): + if value is None: + return None return [converter(x, expression, connection) for x in value] return convert_value diff --git a/docs/source/releases/5.1.x.rst b/docs/source/releases/5.1.x.rst index e89e4e73f..67d988859 100644 --- a/docs/source/releases/5.1.x.rst +++ b/docs/source/releases/5.1.x.rst @@ -2,6 +2,14 @@ Django MongoDB Backend 5.1.x ============================ +5.1.0 beta 4 +============ + +*Unreleased* + +- Fixed crash when loading models with a null value for ``ArrayField``\s where + the ``base_field`` uses a database converter. + 5.1.0 beta 3 ============ diff --git a/docs/source/releases/5.2.x.rst b/docs/source/releases/5.2.x.rst index edad165d0..db3bf67e3 100644 --- a/docs/source/releases/5.2.x.rst +++ b/docs/source/releases/5.2.x.rst @@ -2,6 +2,17 @@ Django MongoDB Backend 5.2.x ============================ +5.2.0 beta 1 +============ + +*Unreleased* + +Bug fixes +--------- + +- Fixed crash when loading models with a null value for ``ArrayField``\s where + the ``base_field`` uses a database converter. + 5.2.0 beta 0 ============ diff --git a/tests/model_fields_/models.py b/tests/model_fields_/models.py index 2470f4bb8..9a4efc898 100644 --- a/tests/model_fields_/models.py +++ b/tests/model_fields_/models.py @@ -80,7 +80,12 @@ class NestedIntegerArrayModel(models.Model): class OtherTypesArrayModel(models.Model): ips = ArrayField(models.GenericIPAddressField(), default=list) uuids = ArrayField(models.UUIDField(), default=list) - decimals = ArrayField(models.DecimalField(max_digits=5, decimal_places=2), default=list) + decimals = ArrayField( + models.DecimalField(max_digits=5, decimal_places=2), + default=list, + null=True, + blank=True, + ) tags = ArrayField(TagField(), blank=True, null=True) json = ArrayField(models.JSONField(default=dict), default=list) diff --git a/tests/model_fields_/test_arrayfield.py b/tests/model_fields_/test_arrayfield.py index e3dd4e594..aecfe0074 100644 --- a/tests/model_fields_/test_arrayfield.py +++ b/tests/model_fields_/test_arrayfield.py @@ -195,10 +195,11 @@ def test_null_from_db_value_handling(self): instance = OtherTypesArrayModel.objects.create( ips=["192.168.0.1", "::1"], uuids=[uuid.uuid4()], - decimals=[decimal.Decimal(1.25), 1.75], + decimals=None, tags=None, ) instance.refresh_from_db() + self.assertIsNone(instance.decimals) self.assertIsNone(instance.tags) self.assertEqual(instance.json, [])