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

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 

5 

6# NOTE: Module must contain both Serializer and Deserializer 

7 

8__all__ = ( 

9 'Deserializer', 

10 'Serializer', 

11) 

12 

13 

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) 

21 

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 

26 

27 return value if is_protected_type(value) else field.value_to_string(obj)