2016-10-05 9 views
4

Djangoの残りのフレームワークがDjangoの残りのフレームワーク:キー

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

APIエンドポイントで次の出力を返すように、アレイが、IDを持つオブジェクトのリストを返しません。それはのようなリストオブジェクト形式でデータを戻すことができます:

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

とビューは次のとおりです:

{ 
    "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 ScoreViewSet(viewsets.ModelViewSet): 

    serializer_class = ScoreSerializer 

答えて

5

コードListMixinは、開始するのに適しています。シリアライザの結果を得て、好きなように変換する必要があります。

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

関連する問題