使用Django 2的自定义序列化器

时间:2018-07-17 19:07:02

标签: django-rest-framework django-2.0 python-3.7

我想创建一个序列化器,以给定输入JSON对象选择某些属性。

有一个旧系统发送对象,例如:

{
    "a": {
        "b": "test"
    }
}

我需要保留对象的某些属性。例如a.b.我创建了以下序列化器,但不起作用:

class CustomSerializer(serializers.Serializer):
    b = serializers.CharField(source='a.b', required=True)

有人知道失败了吗?

谢谢!

2 个答案:

答案 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'}}