Coverage for utilities/serializers/json.py: 100%
12 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.contrib.postgres.fields import ArrayField
2from django.core.serializers.json import Deserializer
3from django.core.serializers.json import Serializer as Serializer_
4from django.utils.encoding import is_protected_type
6# NOTE: Module must contain both Serializer and Deserializer
8__all__ = (
9 'Deserializer',
10 'Serializer',
11)
14class Serializer(Serializer_):
15 """
16 Custom extension of Django's JSON serializer to support ArrayFields (see
17 https://code.djangoproject.com/ticket/33974).
18 """
19 def _value_from_field(self, obj, field):
20 value = field.value_from_object(obj)
22 # Handle ArrayFields (including subclasses) of protected types
23 if isinstance(field, ArrayField):
24 if not value or is_protected_type(value[0]):
25 return value
27 return value if is_protected_type(value) else field.value_to_string(obj)