2017-11-17 12 views
0

私はディスク・シリアライザを持って、私のディスクのシリアライザは怒鳴るです:Django-Rest-Frameworkのデータプロパティでデータを再構築する方法は?

class DiskSerializer(ModelSerializer): 

    diskessencetype_name = serializers.ReadOnlyField(source='diskEssenceType.name') 
    diskostype_name = serializers.ReadOnlyField(source='diskOsType.name') 
    class Meta: 
     model = Disk 
     fields = [ 
      "id", 
      "price", 
      "diskessencetype_name", 
      "diskostype_name", 
     ] 

views.pyが怒鳴るです:

class DiskListAPIView(ListAPIView): 
    serializer_class = DiskSerializer 
    permission_classes = [] 
    queryset = Disk.objects.all() 

そして、それは怒鳴るようなデータを生成します。

[ 
    { 
     "id": 4, 
     "price": "5.00", 
     "diskessencetype_name": "ssd", 
     "diskostype_name": "系统盘" 
    }, 
    { 
     "id": 5, 
     "price": "6.00", 
     "diskessencetype_name": "sas", 
     "diskostype_name": "系统盘" 
    }, 
    { 
     "id": 6, 
     "price": "5.00", 
     "diskessencetype_name": "sas", 
     "diskostype_name": "数据盘" 
    }, 
    { 
     "id": 7, 
     "price": "6.00", 
     "diskessencetype_name": "sas", 
     "diskostype_name": "系统盘" 
    }, 
    { 
     "id": 8, 
     "price": "6.00", 
     "diskessencetype_name": "sas", 
     "diskostype_name": "系统盘" 
    }, 
    ..... 
    ] 

しかし、私は検索して、データに縛られる制約をしたい:

{ 
    "系统盘":[{"id":5, "diskessencetype_name":"sas", "price":5.00},.....] 
    "数据盘":[{"id":7, "diskessencetype_name":"ssd", "price":7.00},.....] 
} 

あなたはインスタンスのプロパティ(diskostype_name)によって再構成していますが、それを実現するためのビルドインメソッドはありますか?

どのように再構築できますか?

答えて

0

views.py

class Postlar(ListAPIView): 
    permission_classes = [] 
    queryset = Disk.objects.all() 
    serializer_class = DiskSerializer 

    def list(self, request, *args, **kwargs): 
     result = {} 
     SerializerClass = self.get_serializer_class() 
     for u in ["系统盘", "数据盘"]: 
      serializer = SerializerClass(Disk.objects.filter(diskOsType__name=u), many=True) 
      result[u] = serializer.data 

     return Response(result) 
+0

あなたの答えのおかげで、私は自分のFacebookのIDを知ることができますか? – fanhualuojin154873

+0

シリアライザでロジックを作成できますか? – fanhualuojin154873

関連する問題