美文网首页
序列化与反序列化的顺序

序列化与反序列化的顺序

作者: 鸟它鸟 | 来源:发表于2019-02-12 11:07 被阅读0次

序列化:
model --> serializers(字段定义) --> to_representation -->views

反序列化:
web --> querydict -->to_internal_value --> serializers(字段定义) --> 自定义字段验证(validate_字段) --> 自定义验证(validate,基于整个数据对象的验证) --> create

image.png

如果是只读的接口可以使用SerializerMethodField

    idc = serializers.SerializerMethodField()
    # 这种方式,在serializers(字段定义) 之前做数据操作

    def get_idc(self,obj):
        return {
            "id": obj.id,
            "name": obj.name
        }

如果是需要反序列化写入的必须使用PrimaryKeyRelatedField

idc = serializers.PrimaryKeyRelatedField(many=False,queryset=Idc.objects.all())
    def to_representation(self, instance):
        """
        序列化修改输出字段
        """
        idc_obj = instance.idc
        ret = super(CabinetSerializer,self).to_representation(instance)
        ret["idc"] = {
            "id":idc_obj.id,
            "name":idc_obj.name
        }
        return ret

    def to_internal_value(self, data):
        """
        反序列化第一步,拿到的是提交过来的原始数据,QueryDict => request.GET,request.POST
        """

        print(data)
        return super(CabinetSerializer,self).to_internal_value(data)

相关文章

网友评论

      本文标题:序列化与反序列化的顺序

      本文链接:https://www.haomeiwen.com/subject/vuqayftx.html