我想创建一个序列化器,以给定输入JSON对象选择某些属性。
有一个旧系统发送对象,例如:
{
"a": {
"b": "test"
}
}
我需要保留对象的某些属性。例如a.b.我创建了以下序列化器,但不起作用:
class CustomSerializer(serializers.Serializer):
b = serializers.CharField(source='a.b', required=True)
有人知道失败了吗?
谢谢!
答案 0 :(得分:0)
您需要实现嵌套序列化程序。对于您的示例,您可以尝试这样的事情:
class BSerializer(serializers.Serializer):
b = serializers.CharField()
class ASerializer(serializers.Serializer):
a = BSerializer()
注意:这只是嵌套序列化程序的一个示例。您可能需要添加一些东西才能使其正常工作(添加Meta,其他需要的字段,在视图中使用它等)。
答案 1 :(得分:0)
使用JSONField
代替CharField
class CustomSerializer(serializers.Serializer):
a = serializers.JSONField()
示例
In [1]: from rest_framework import serializers
In [2]: class CustomSerializer(serializers.Serializer):
...: a = serializers.JSONField()
...:
In [3]: data = {
...: "a": {
...: "b": "test"
...: }
...: }
In [4]:
In [4]: serializer = CustomSerializer(data=data)
In [5]: serializer.is_valid()
Out[5]: True
In [6]: serializer.data
Out[6]: {'a': {'b': 'test'}}