Loading django/contrib/postgres/fields/array.py +5 −2 Original line number Diff line number Diff line Loading @@ -106,6 +106,9 @@ class ArrayField(Field): base_field = self.base_field for val in vals: if val is None: values.append(None) else: obj = AttributeSetter(base_field.attname, val) values.append(base_field.value_to_string(obj)) return json.dumps(values) Loading django/contrib/postgres/fields/ranges.py +6 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,11 @@ class RangeField(models.Field): base_field = self.base_field result = {"bounds": value._bounds} for end in ('lower', 'upper'): obj = AttributeSetter(base_field.attname, getattr(value, end)) val = getattr(value, end) if val is None: result[end] = None else: obj = AttributeSetter(base_field.attname, val) result[end] = base_field.value_to_string(obj) return json.dumps(result) Loading docs/releases/1.8.10.txt +4 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,7 @@ Bugfixes * Made ``forms.FileField`` and ``utils.translation.lazy_number()`` picklable (:ticket:`26212`). * Fixed :class:`~django.contrib.postgres.fields.RangeField` and :class:`~django.contrib.postgres.fields.ArrayField` serialization with ``None`` values (:ticket:`26215`). docs/releases/1.9.3.txt +4 −0 Original line number Diff line number Diff line Loading @@ -27,3 +27,7 @@ Bugfixes * Made ``forms.FileField`` and ``utils.translation.lazy_number()`` picklable (:ticket:`26212`). * Fixed :class:`~django.contrib.postgres.fields.RangeField` and :class:`~django.contrib.postgres.fields.ArrayField` serialization with ``None`` values (:ticket:`26215`). tests/postgres_tests/test_array.py +3 −3 Original line number Diff line number Diff line Loading @@ -448,17 +448,17 @@ class TestMigrations(TransactionTestCase): class TestSerialization(PostgreSQLTestCase): test_data = ( '[{"fields": {"field": "[\\"1\\", \\"2\\"]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' '[{"fields": {"field": "[\\"1\\", \\"2\\", null]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' ) def test_dumping(self): instance = IntegerArrayModel(field=[1, 2]) instance = IntegerArrayModel(field=[1, 2, None]) data = serializers.serialize('json', [instance]) self.assertEqual(json.loads(data), json.loads(self.test_data)) def test_loading(self): instance = list(serializers.deserialize('json', self.test_data))[0].object self.assertEqual(instance.field, [1, 2]) self.assertEqual(instance.field, [1, 2, None]) class TestValidation(PostgreSQLTestCase): Loading Loading
django/contrib/postgres/fields/array.py +5 −2 Original line number Diff line number Diff line Loading @@ -106,6 +106,9 @@ class ArrayField(Field): base_field = self.base_field for val in vals: if val is None: values.append(None) else: obj = AttributeSetter(base_field.attname, val) values.append(base_field.value_to_string(obj)) return json.dumps(values) Loading
django/contrib/postgres/fields/ranges.py +6 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,11 @@ class RangeField(models.Field): base_field = self.base_field result = {"bounds": value._bounds} for end in ('lower', 'upper'): obj = AttributeSetter(base_field.attname, getattr(value, end)) val = getattr(value, end) if val is None: result[end] = None else: obj = AttributeSetter(base_field.attname, val) result[end] = base_field.value_to_string(obj) return json.dumps(result) Loading
docs/releases/1.8.10.txt +4 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,7 @@ Bugfixes * Made ``forms.FileField`` and ``utils.translation.lazy_number()`` picklable (:ticket:`26212`). * Fixed :class:`~django.contrib.postgres.fields.RangeField` and :class:`~django.contrib.postgres.fields.ArrayField` serialization with ``None`` values (:ticket:`26215`).
docs/releases/1.9.3.txt +4 −0 Original line number Diff line number Diff line Loading @@ -27,3 +27,7 @@ Bugfixes * Made ``forms.FileField`` and ``utils.translation.lazy_number()`` picklable (:ticket:`26212`). * Fixed :class:`~django.contrib.postgres.fields.RangeField` and :class:`~django.contrib.postgres.fields.ArrayField` serialization with ``None`` values (:ticket:`26215`).
tests/postgres_tests/test_array.py +3 −3 Original line number Diff line number Diff line Loading @@ -448,17 +448,17 @@ class TestMigrations(TransactionTestCase): class TestSerialization(PostgreSQLTestCase): test_data = ( '[{"fields": {"field": "[\\"1\\", \\"2\\"]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' '[{"fields": {"field": "[\\"1\\", \\"2\\", null]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' ) def test_dumping(self): instance = IntegerArrayModel(field=[1, 2]) instance = IntegerArrayModel(field=[1, 2, None]) data = serializers.serialize('json', [instance]) self.assertEqual(json.loads(data), json.loads(self.test_data)) def test_loading(self): instance = list(serializers.deserialize('json', self.test_data))[0].object self.assertEqual(instance.field, [1, 2]) self.assertEqual(instance.field, [1, 2, None]) class TestValidation(PostgreSQLTestCase): Loading