Django / Serializer - How to pass label attached to choice field in API?

I am trying to get the label attached to the relevant interger for the choice field. Although the API returns the interger, I cannot seem to be able to return the actual label value.

This is the current return:

[
    {
        "id": 16, 
        "frequency": 0,
    },
    {
        "id": 15,
        "frequency": 2,
    }
]

What am I missing?

models

FREQUENCIES=(
    (0,'Monthly'),
    (1,'Weekly'),
    (2,'Daily'),
    (3, 'Bi-Weekly'),
    )

class Model(models.Model):

    frequency = models.IntegerField(choices=FREQUENCIES, default=0,null=True, blank=True)

serializer

class ModelSerializer(serializers.ModelSerializer):

    frequency_label = serializers.ChoiceField(
        choices=FREQUENCIES,
        source='frequency', 
        read_only=True
    )

    class Meta:
        model = Model
        fields = [
            'frequency',
            'frequency_label',
        ]

viewset

class ModelViewSet(viewsets.ViewSet):


    permission_classes = [IsAuthenticated]

    @swagger_auto_schema(
        method='get',
        responses={200: ModelSerializer(many=True)}
    )
    @action(detail=False, methods=['get'], url_path='list-rules')
    def a(self, request):

        q = Model.objects.filter(field=some_variable)

        return Response(
            ModelSerializer(q, many=True).data,
            status=status.HTTP_200_OK
        )
Вернуться на верх