我有一个预定义的API,例如:
{
time : some_time,
height : {1: 154, 2: 300, 3: 24},
color : {1: 'red', 2: 'blue', 3: 'green'},
age : {1: 27, 2: 324, 3: 1},
... many, many more keys.
}
我无法控制此API,因此无法更改其结构。
子字典中的每个整数键都是链接的,并且是一个记录的一部分。例如,高度为154的对象也是颜色:红色,年龄:27。
我知道与此配合使用的一种策略是为每个字段使用单独的序列化器。
class MySerializer(serializers.ModelSerializer):
# Nested serializers
height = HeightSerializer()
colour = ColourSerializer()
age = AgeSerializer()
etc, etc, etc
但这仍然给我带来了混乱的数据,需要在序列化程序中进行大量update()逻辑。
我想做的是拥有一个嵌套的序列化程序,该序列化程序可以访问完整的请求数据,并且可以同时处理高度,颜色和年龄,并通过to_internal_value()方法返回类似的内容:
{
['record' : 1, 'height': 154, 'colour' : 'red', 'age' : 27],
['record' : 2, 'height': 300, 'colour' : 'blue', 'age' : 324],
['record' : 3, 'height': 24, 'colour' : 'green', 'age' : 2],
}
但是不幸的是,高度序列化程序似乎只能访问称为height的字段上的信息。我知道我可以在 init 调用中使用source =“ foo”,但是它只能访问一个名为“ foo”的字段。我希望它可以访问所有字段。
我注意到有一个source ='*'选项,但是它不起作用。除非在api调用中有键“ height”,否则我的序列化器的 init 方法永远不会被调用。
有什么想法可以让我使用嵌套的序列化程序来访问请求中的所有数据吗?
谢谢
乔伊