drf序列化和反序列化(二:modelserializer)

yingjp yingjp     2022-12-03     184

关键词:

一: rest_framework 中 serializers.Serializer的不方便之处(以下简称Serializer)

   a:需要定义每一个字段,并且这个字段是和models字段及其类似。

   b:和froms是不是很像,有没有类似ModelFroms类似的模块,简化字段的编写,当然有ModelSerializer就是这中类型

二:ModelSerializer序列化

    a:view中的文件不需要修改

    b:重新编写BookSerializers继承serializers.ModelSerializer

      --model 指定哪一个model

      --fields 表示需要序列化的字段,"__all__"全部字段

      --depth 向下查找一层。指对外键关系会继续遍历外键对象的全部属性。(但是如果外键表字段过多,而前端需要的字段并不是很多,使用起来会不方便。所以常常不用)

class  BookSerializers(serializers.ModelSerializer):
    class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序
        depth=1     #向下查找一层

   c:对部分字段,如外键,choices字段,进行自定义序列化

     --需要结合反序列化一起使用

class  BookSerializers(serializers.ModelSerializer):
    #部分字段自定义  字段定义后 fields字段一定要展现
    category_display = serializers.CharField(source="get_category_display",read_only=True)

    ##处理一对多关系  调用SerializerMethodField()方法
    publisher_id = serializers.SerializerMethodField(read_only=True)
    def get_publisher_id(self,obj):
        publisher_obj =obj.publisher
        return "id":publisher_obj.id,"title":publisher_obj.title
    #处理多对多
    authons = serializers.SerializerMethodField(read_only=True)
    def get_authons(self,obj):
        authon_query_list=obj.authon.all()
        return ["id":authon_query.id,"name":authon_query.namefor authon_query in authon_query_list]

    class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序

        #depth=1     #向下查找一层
        

三:ModelSerializer反序列化

      --extra_kwargs字段设置对应的字段反序列化

      --提交的数据,和models字段一样。外键关系传递id即可

      --会自动添加数据

 class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序

        #设置反序列化的字段  write_only
        extra_kwargs=
            ‘category‘:‘write_only‘:True,
            ‘publisher‘: ‘write_only‘:True,
            ‘authon‘: ‘write_only‘:True,
        

四:路由分发注意点

         a:path(‘retrieve/<int:pk>‘,views.BookEditView.as_view())       #id修改成pk 

 

五:序列化小结

技术图片

 

 

drf单表序列化和反序列化

...建serializer.pyfromrest_frameworkimportserializersfrom.modelsimportUser#序列化classUserSerializers(serializers.ModelSerializer):classMeta:model=Userfields=‘__all__‘#反序列化classUserUnSerializer(serializers.Serializer):name=serializers.CharField(max_length=32)pas 查看详情

drf一对多序列化和反序列化(代码片段)

DRF一对多序列化和反序列化models.py#商品分类classCategory(models.Model):name=models.CharField(max_length=32)#商品classGoods(models.Model):name=models.CharField(max_length=32)price=models.DecimalField(max_digits=9,decimal_places=2)cate=models.ForeignKey(to='Category',on_delete... 查看详情

drf高级二序列化器(代码片段)

序言序列化器是drf非常好用的一个功能!美酒虽好,切莫贪杯。合适的位置做合适的事情。drf非常擅长列表类,非图表类。此时,基础的视图是一个比较好的选择。序列化器序列化分为正序列化和反序列化。正序列化:models对象... 查看详情

09.drf-modelserializer(代码片段)

四、模型类序列化器ModelSerializer如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动... 查看详情

drf图片字段序列化完整路径(代码片段)

...     原有的数据格式:二.定制化:  1.可以嵌套序列化pol_type,lit_des,area_detail,但结构如下:classChrDetailSerializer(serializers.ModelSerializer):"""年代地层详情序列化"""classMeta:model=Address_Lisfields=(‘region‘,)classLisDetailSerializer(seri... 查看详情

drf框架serializer之modelserializer(代码片段)

一、基本语法在没有使用ModelSerializer序列化器类之前,我们定义的序列化器类都需要添加对应模型类字段的很多字段,如果添加的字段特别多,那么势必会影响开发效率和代码的可读性,因此会选择一种更为简洁的序列化器类来... 查看详情

drf序列化(代码片段)

目录序列化家族SerializerModelSerializerListSerializerSerializer序列化(了解)视图类序列化类Serializer反序列化(了解)视图类序列化类ModelSerializer序列化和反序列化(重点)视图类序列化类模型类序列化家族Serializer底层序列化重点:单表... 查看详情

modelserializer组件(代码片段)

ModelSerializer组件一、DRF模型类序列化器如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型... 查看详情

drf高级五modelserializer(代码片段)

...模型自动生成一组字段。它将根据模型上的参数自动生成序列化程序的验证程序。它包括create()和update()简单默认实现。fromrest_frameworkimportserializersclassProductSerializer(serializers.ModelSerializer):classMeta:model=Productfields=__all__#exclude=(created,)... 查看详情

模型类序列化器-modelserializer(代码片段)

模型类序列化器目录模型类序列化器1简介2定义3用法1简介drf提供了模型类序列化器:ModelSerializer。作用就是简化对应django模型类的序列化器的定义。ModelsSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段... 查看详情

drf之序列化(代码片段)

目录准备事项序列化组件初见序列化字段ModelSerializer重载create方法单条数据处理现阶段代码准备事项#models.pyfromdjango.dbimportmodelsclassPublisher(models.Model):title=models.CharField(max_length=32)address=models.CharField(max_length=128)d 查看详情

modelserializer类序列操作(代码片段)

目录ModelSerializer类序列化mysql配置:单表序列化与反序列化操作:ModelSerializer类序列化与反序列化:put更新:post新增:单删:ModelSerializer类序列化mysql配置:#settings.pyDATABASES='default':'ENGINE':'django.db.backends.mysql','NAM... 查看详情

drf序列化组件(代码片段)

目录在视图中手动完成序列化操作Serializer序列化Serializer序列化总结:Serializer反序列化Serializer反序列化总结:ModelSerializer序列化与反序列化ModelSerializer序列化与反序列化总结:在视图中手动完成序列化操作#view.pyclassUserV1ApiView(AP... 查看详情

drf框架之serializers序列化组件(代码片段)

1.什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimport... 查看详情

drf的serializer和modelserializer(代码片段)

...rket_price‘,‘add_time‘)使用fields="__all__"即可将所有字段都序列化。 查看详情

DRF:使用嵌套序列化程序的简单外键分配?

】DRF:使用嵌套序列化程序的简单外键分配?【英文标题】:DRF:Simpleforeignkeyassignmentwithnestedserializers?【发布时间】:2015-07-0903:58:03【问题描述】:使用DjangoREST框架,标准ModelSerializer将允许通过将ID作为整数发布来分配或更改Forei... 查看详情

drf-五大方法(重要)(代码片段)

序列化类#BookListSerializer是BookModelSerializer子序列化类classBookListSerializer(serializers.ListSerializer):#自定义的群增群改辅助类,没有必要重写create方法defcreate(self,validated_data):returnsuper().create(validated_data)#获取视图类中的validated_data_list进... 查看详情

Urlize DRF 链接

】UrlizeDRF链接【英文标题】:UrlizeDRFLink【发布时间】:2019-09-0111:15:42【问题描述】:我有一个DRF序列化器:classActivitySerializer(serializers.ModelSerializer):link=serializers.CharField(source=\'get_analytic_link\',allow_null=True)classMeta:model=Act 查看详情