如何从不同的模型制作自定义序列化程序?

问题描述 投票:1回答:1

我有3种不同的模型。我需要使用这3个模型构建自定义序列化程序。我尝试使用一些代码,但是没有达到我的期望。有结构,但是我无法获得我期望的数据

#序列化器这是我的序列化器和ModelOne,ModelTwo,ModelThree,这些是我的模型。

class ModelOneSerializer(serializers.ModelSerializer):
    class Meta:
        model = ModelOne
        fields = ['id', 'obj_1', 'obj_2']


class ModelTwoSerializer(serializers.ModelSerializer):
    class Meta:
        model = ModelTwo
        fields = ['id', 'obj_1', 'obj_2']


class ModelThreeSerializer(WritableNestedModelSerializer):
    class Meta:
        model = ModelThree
        fields = ['id', 'obj_1', 'obj_2']



class CustomSerializer(serializers.Serializer):
    model_1 = ModelOneSerializer(many=True)
    model_2 = ModelTwoSerializer(many=True)
    model_3 = ModelThreeSerializer(many=True)

#视图


class CustomView(APIView):
    def get(self, request, *args, **kwargs):
        serializer = CustomSerializer(context={'request': request})
        return Response({'response': 'ok', 'result': serializer.data})

#预期输出


    {
    "response": "ok",
    "result": {
        "model_1": [
        {
        "id":"1",
        "obj_1":"test",
        "obj_2":"test",
        "obj_3":"test"
        },
        {
        "id":"1",
        "obj_1":"test",
        "obj_2":"test",
        "obj_3":"test"
        }
        ],
        "model_2": [
        {
        "id":"1",
        "obj_1":"test",
        "obj_2":"test",
        "obj_3":"test"
        }
        ],
        "model_3": [
        {
        "id":"1",
        "obj_1":"test",
        "obj_2":"test",
        "obj_3":"test"
        }
        ]
    }
}

[结果可能与model_1结构中的model_2和model_3中有多个数据

django django-rest-framework serializer
1个回答
0
投票

您没有通过what来序列化所有模型序列化器,因此CustomSerializer没有要序列化的任何内容。

您可以将模型的查询集传递给CustomSerializer

class CustomView(APIView):
    def get(self, request, *args, **kwargs):   
        model_one_qset = ModelOne.objects.all()
        model_two_qset = ModelTwo.objects.all()
        model_three_qset = ModelThree.objects.all()

        qsets_map = {
            'model_1': model_one_qset,
            'model_2': model_two_qset,
            'model_3': model_three_qset,
        }

        serializer = CustomSerializer(qsets_map, context={'request': request})

        return Response({'response': 'ok', 'result': serializer.data})
© www.soinside.com 2019 - 2024. All rights reserved.