Python 3.x 如果我没有';I don’我不知道将选择哪个序列化程序?

Python 3.x 如果我没有';I don’我不知道将选择哪个序列化程序?,python-3.x,django,serialization,django-rest-framework,django-serializer,Python 3.x,Django,Serialization,Django Rest Framework,Django Serializer,我有一个简单的序列化程序: class BoxSerializer(Serializer): modelName = serializers.CharField(required=True) body = ??? 我想根据“modelName”字段序列化字段“body”。例如,如果modelName是“Phone”,那么我想对“body”字段使用PhoneSerializer。如果modelName‘book’,我想使用BookSerializer等等。我如何实现这一点? 请注

我有一个简单的序列化程序:

class BoxSerializer(Serializer):
    modelName = serializers.CharField(required=True)
    body = ???
我想根据“modelName”字段序列化字段“body”。例如,如果modelName是“Phone”,那么我想对“body”字段使用PhoneSerializer。如果modelName‘book’,我想使用BookSerializer等等。我如何实现这一点?
请注意,我不会将任何内容保存到数据库中

尝试类似的操作,获取字段值,然后在
if else
块中选择序列化程序:

@api_view(['GET', 'POST'])
def serialize(request, pk):
    box = Box.objects.get(pk=pk)
    if box.modelName = 'x':
        serializer = BoxSerializerX(box)
    else:
        serializer = BoxSerializerY(box)
    return Response(serializer.data)

尝试以下操作,获取字段值,然后选择
if-else
块中的序列化程序:

@api_view(['GET', 'POST'])
def serialize(request, pk):
    box = Box.objects.get(pk=pk)
    if box.modelName = 'x':
        serializer = BoxSerializerX(box)
    else:
        serializer = BoxSerializerY(box)
    return Response(serializer.data)

为了获得最佳实践,您可以实施:

class BoxSerializer(Serializer):
    modelName = serializers.CharField(required=True)
    body = serializers.SerializerMethodField()
    
    def get_body(self,box):
        if box.modelName == "x":
            return XSerializer(box.body)
        elif box.modelName == "y":
            return YSerializer(box.body)

为了获得最佳实践,您可以实施:

class BoxSerializer(Serializer):
    modelName = serializers.CharField(required=True)
    body = serializers.SerializerMethodField()
    
    def get_body(self,box):
        if box.modelName == "x":
            return XSerializer(box.body)
        elif box.modelName == "y":
            return YSerializer(box.body)

您将需要一对序列化程序(显然)您将需要一对序列化程序(显然)