2016-10-05 33 views
4

Django的REST框架返回在API端點Django的REST框架:不要用ID返回數組,但對象列表關鍵

[ 
    { 
     "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 
    }, 
... 

下面的輸出是否有可能像一個列表對象的格式返回數據:

{ 
    "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 
    }, 
... 

我的串行是:

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') 

,並查看是:

class ScoreViewSet(viewsets.ModelViewSet): 

    serializer_class = ScoreSerializer 

回答

5

ListMixin代碼a是上手的好地方。你應該得到序列化器的結果並按照你的喜好進行轉換。

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) 
+0

一個例子會很好 – niklas

相關問題