【问题标题】:How we can deserialize the nested json object into python model object at once?我们如何一次将嵌套的 json 对象反序列化为 python 模型对象?
【发布时间】:2019-07-09 06:37:52
【问题描述】:

当我们将serialize python model object 嵌套到 json data 时,我们可以在 django 中将其序列化为 foe 示例。

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)

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

但是我怎样才能像我们通过传递参数DataSerializer(data_list, many=True) 一次序列化一样一次为数据列表执行此操作。

【问题讨论】:

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


    【解决方案1】:

    只需在 Serializer 类中附加 deserialize 方法

    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 中被推荐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2017-10-29
      • 2016-12-12
      • 2017-12-28
      • 1970-01-01
      • 2023-01-11
      相关资源
      最近更新 更多