6

Django rest framework returns the following output at an API endpoint

  [
    {
        "id": "QFELD_2.3.2.QF1",
        "siteuxid": "VBKM02_Abschlusstest",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA0",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
    {
        "id": "QFELD_2.3.2.QF2",
        "siteuxid": "VBKM02_Abschlusstest",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA1",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    }, 
...

Is it possible to return the data in an list object format like:

  {
    "QFELD_2.3.2.QF1" : {
        "siteuxid": "VBKM02",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA0",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
    "QFELD_2.3.2.QF2" : {
        "siteuxid": "VBKM02",
        "section": 2,
        "maxpoints": 4,
        "intest": true,
        "uxid": "KA1",
        "points": 0,
        "value": 0,
        "rawinput": "",
        "state": 3
    },
...

My Serializer is:

class ScoreSerializer(serializers.ModelSerializer):
    id = serializers.CharField(required=False, allow_blank=True, max_length=100, source='q_id')
    class Meta:
        model = Score
        fields = ('id', 'siteuxid', 'section', 'maxpoints', 'intest', 'uxid', 'points', 'value', 'rawinput', 'state')

And View is:

class ScoreViewSet(viewsets.ModelViewSet):

    serializer_class = ScoreSerializer

1 Answer 1

6

The ListMixin code a is good place to get started. You should get the serializer's result and transform it as you like.

class ListModelMixin(object):
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            # Might need to change this not to transform all the data
            data = {i['id']: i for i in serializer.data}
            return self.get_paginated_response(data)

        serializer = self.get_serializer(queryset, many=True)
        data = {i['id']: i for i in serializer.data}
        return Response(data)
Sign up to request clarification or add additional context in comments.

1 Comment

An example would be nice

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.