序列化与反序列化的顺序

序列化:
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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Serializers 序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型,然后可...
    lkning阅读 1,149评论 0 1
  • 定义Serializer class BookInfoSerializer(serializers.Seriali...
    LiWei_9e4b阅读 1,129评论 0 0
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 11,197评论 0 24
  • 一、 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化de...
    步积阅读 1,493评论 0 10
  • 你我成長,你我快樂,你我幸福,你我未來。藍建民
    bfc125a28b54阅读 142评论 0 1

友情链接更多精彩内容