Python Django REST框架:嵌套序列化程序和反序列化

Python Django REST框架:嵌套序列化程序和反序列化,python,django,serialization,django-rest-framework,deserialization,Python,Django,Serialization,Django Rest Framework,Deserialization,我再次被Django REST框架及其序列化程序所困扰 基本上,我希望能够将以下传入数据粘贴到序列化程序中。序列化程序实例: data = { "thing_id": 715, "sub_things": [ { "id": 1, "name": "bob" }, { "id": 2, "name": "mike"

我再次被Django REST框架及其序列化程序所困扰

基本上,我希望能够将以下传入数据粘贴到序列化程序中。序列化程序实例:

data = {
    "thing_id": 715,
    "sub_things": [
        {
            "id": 1,
            "name": "bob"
        },

        {
             "id": 2,
             "name": "mike"
        }
    ]
}
sub_事件由名为SubThingSerializer的serializers.ModelSerializer处理。这就是它的样子

class SubThingSerializer(serializers.ModelSerializer):
    class Meta:
        model = SubThing
        fields = ('id', 'name')
        read_only_fields = ('id', 'name')
事物的序列化由ThingSerializer处理,我现在处理如下:

class ThingSerializer(serializers.Serializer):
    thing_id = serializers.IntegerField()
    sub_things= SubThingSerializer(many=True)
现在,当我

serializer = ThingSerializer(data=data)
我收到空订单的图片,如:

{'sub_things': [OrderedDict(), OrderedDict()], 'thing_id': 715}
我想说序列化程序不需要存储到数据库中是明智的,但它确实使用了数据库中的子元素。这些也不会写入数据库。这只是为了跟踪该对象包含的子对象,在浏览器客户端和Python对象之间来回传递这些数据以进行一些计算。并可能将其存储在会话中

编辑1:

很可能我需要在ThingSerializer的create方法中添加一些内容。所以,我想最终的问题是:将sub_数据传递给SubthingSerializer的正确语法是什么

编辑2:

我又挖了一点。似乎出于某种原因,空OrderedDicts在验证的_数据中被传递到ThingSerializer.create()。Serializer使用Serializer验证OK。is_valid()。我可以从初始数据中获取必要的数据,但这似乎不是很可靠

编辑3:


还使用serializers.ListField()测试了sub_方面的内容。在create方法中,仍然可以在已验证的数据中看到空的OrderedDicts。

最终解决了这个问题。我的SubThingSerializer上的只读字段阻止数据通过验证,从而导致创建空的dict。我使用只读字段来防止不存在的子对象数据被传递到我的代码中,但我想我需要找到另一种方法