我们如何才能立即将嵌套的json对象反序列化为python模型对象?

时间:2019-02-15 06:40:36

标签: python json django python-3.x django-rest-framework

当我们serialize python model object嵌套json data时,我们可以在django中对其进行序列化,作为敌人的例子。

DataSerializer(data_list, many=True)

输出将是这样。

[
    {"name":"user_1", "id":1}, 
    {"name":"user_2", "id":2}, 
    {"name":"user_3", "id":3},
    ... ...
]

现在,我想立即将json object的列表反序列化为python model object

例如:

# the serializer class
class UserSerilizer(serializers.Serializer):
    id = serializers.IntegerField(required=True)
    name = serializers.CharField(required=True)


# Request model class.
class UserRequestModel:
    id = None
    name = None

    def __init__(self, dictionary):
        self.__dict__.update(dictionary)

我做什么。

# serialize the request data for param validation
user_serializer = UserSerilizer(data=request.data)

# update the user request model with validate data
user_data = UserRequestModel(user_serializer.validated_data)

这就是为什么我可以访问请求正文user_data.id的值user_data.name{"name":"user_1", "id":1}

但是我该如何一次处理数据列表,就像我们通过传递参数DataSerializer(data_list, many=True)一次进行序列化一样。

1 个答案:

答案 0 :(得分:0)

只需在deserialize类中附加Serializer方法

class UserSerializer(serializers.Serializer):
    id = serializers.IntegerField(required=True)
    name = serializers.CharField(required=True)

    @classmethod
    def deserialize(cls, data, many=False):
        if many is False:
            return UserRequestModel(data)
        else:
            obj_list = []
            for d in data:
                obj_list.append(UserRequestModel(d))
            return obj_list

但我不明白您为什么要反序列化。我认为在django中不建议这样做。