【发布时间】:2024-01-12 06:21:01
【问题描述】:
我再次被 Django REST Framework 及其序列化程序卡住了。
基本上,我想做的是将以下传入数据粘贴到 serializers.Serializer 实例中:
data = {
"thing_id": 715,
"sub_things": [
{
"id": 1,
"name": "bob"
},
{
"id": 2,
"name": "mike"
}
]
}
sub_things 由名为 SubThingSerializer 的 serializers.ModelSerializer 处理。这就是它的样子。
class SubThingSerializer(serializers.ModelSerializer):
class Meta:
model = SubThing
fields = ('id', 'name')
read_only_fields = ('id', 'name')
Thing 的序列化由 ThingSerializer 处理,我现在处理如下:
class ThingSerializer(serializers.Serializer):
thing_id = serializers.IntegerField()
sub_things= SubThingSerializer(many=True)
现在,当我这样做时
serializer = ThingSerializer(data=data)
我得到空的 OrderedDicts,例如:
{'sub_things': [OrderedDict(), OrderedDict()], 'thing_id': 715}
我认为说 ThingSerializer 不需要存储到数据库中是明智的,但它确实使用了数据库中的 sub_things。这些也不会写入数据库。这只是为了跟踪事物包含的 sub_things,在浏览器客户端和 Python 对象之间来回传递这些数据以进行一些计算。并且可能将其存储在会话中。
编辑 1:
很可能我需要在我的 ThingSerializer 的 create 方法中添加一些内容。所以,我想最终的问题是:将 sub_thing 数据传递给 SubThingSerializers 的正确语法是什么?
编辑 2:
我又挖了一点。似乎由于某种原因,空的 OrderedDicts 在 valid_data 中传递给 ThingSerializer.create() 。序列化器使用 serializer.is_valid() 验证是否正常。我可以从 initial_data 访问必要的数据,但这似乎不太可靠。
编辑 3:
还使用 serializers.ListField() 对 sub_things 进行了测试。在 create 方法中的validated_data 中仍然看到空的OrderedDicts。
【问题讨论】:
标签: python django serialization django-rest-framework deserialization