How can I serialize list of booleans in django rest framework serializer?

Viewed 289

I'm using Django Rest Framework and I want my data to be stored like this: 'days': [True, True, False, True, False, False, False] as one of the returned fields.

I would like to have a seriaizer:

class HistorySerializer(serializers.Serializer):
    days = serializers.BooleanField(many=True)

but serializers.BooleanField doesn't have 'many' argument.
I've tried doing this:

class DaysListField(serializers.ListField):
    day = serializers.BooleanField()

class HistorySerializer(serializers.Serializer):
    days = DaysListField()

but it produces:

'days': [{'day': True}, {'day': True}, {'day': False}, {'day': False}, {'day': False}, {'day': False}, {'day': False}]

I also tried doing this:

class HistorySerializer(serializers.Serializer):
    days = serializers.SerializerMethodField()
    
    def get_days(self, obj) -> List[bool]:
        return obj.days

but Swagger produces an incorrect output of the days type, it says it should be boolean instead of [boolean].

What is the best way to process this list correctly?

1 Answers

The SerializerMethodField() is a good way to do this. Alter django query part of the example to return a list.

class HistorySerializer(serializers.Serializer):
    days = serializers.SerializerMethodField()
    
    def get_days(self, obj):
        return list(obj.days.value_list('day', flat=True))
Related