簡體   English   中英

如何通過Django-Rest-Framework中的數據屬性重構數據?

[英]How to restructuring the data by the data's property in 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 )進行重組的,是否有內置方法來實現它?

我該如何重建它們?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM