zoukankan      html  css  js  c++  java
  • 序列化器:serializers(django-rest-framework)

    1.定义序列化器类

    2.字段校验

    3.从表数据操作(父表返回从表数据)

    一、关联字段说明(例:父表模型类名:Project;从表模型类名:Interfaces。关联关系,一个或多个Interfaces对应一个Project)
    1.可以定义PrimaryKeyRelatedField来获取关联表的外键值
    2.如果通过父表获取从表数据,默认需要使用从表模型类名小写_set作为序列化器类中的关联字段名称
    3.如果在定义模型类的外键字段时,指定了related_name参数(从表models.py文件中,在与父表的关系中添加),那么会把related_name参数名作为序列化器类中的关联字段名称
    4.PrimaryKeyRelatedField字段,要么指定read_only=True,要么指定queryset参数,否则会报错
    5.如果指定了read_only=True,那么该字段仅序列化输出
    6.如果指定了queryset参数(关联表的查询集对象:queryset=Interfaces.objects.all()),用于对参数进行校验
    7.如果关联字段有多个值,那么必须一案件many=True,一般父表获取从表数据时,关联字段需要指定

    interfaces_set = serializers.PrimaryKeyRelatedField(label='项目所属接口id', help_text='项目所属接口id', read_only=True,many=True)

    二。从表数据返回
    1).从表数据返回方式一:PrimaryKeyRelatedField,返回从表id
    inner = serializers.PrimaryKeyRelatedField(label='项目所属接口id', help_text='项目所属接口id', read_only=True, many=True)

    2).从表数据返回方式二:StringRelatedField字段返回操作:返回从表__str__方法返回值
    1.使用StringRelatedField字段,将关联字段模型类中的__str__方法的返回值作为该字段的值
    2.StringRelatedField字段默认添加了read_only=True,该字段仅序列化输出
    inner = serializers.StringRelatedField(many=True)

    3).从表数据返回方式三:SlugRelateField字段返回某个从表的指定的字段值
    1.使用SlugRelateField字段,将关联模型类中的某个字段,作为该字段的值(slug_field='查询字段值')
    2.如果指定了read_only=True,那么该字段仅序列化输出
    3.如果该字段需要进行反序列化输入,那么必须得指定queryset参数,同时关联字段必须有唯一约束(queryset=Interfaces.objects.all())
    inner = serializers.SlugRelatedField(slug_field='name', many=True, queryset=Interfaces.objects.all())

    4).从表数据返回方式四:返回从表自定义数据
    1.需要重新定义一个从表的序列化类,并指定参数(详情见:InterfacesSerilizer类)
    interfaces_set = InterfacesSerilizer(label='所属接口信息', help_text='所属接口信息', read_only=True, many=True)

    爱折腾的小测试
  • 相关阅读:
    题解 P3842 【[TJOI2007]线段】
    题解 CF1366A 【Shovels and Swords】
    题解 CF1391D
    题解 CF1374B 【Multiply by 2, divide by 6】
    CSP-J2020爆零记
    YbtOJ20025 放置石子
    YbtOJ20001 立方数差
    [仅供参考]W-RB的码风及要求
    [敲黑板]CSP考试策略
    [水沝淼㵘]向量水解
  • 原文地址:https://www.cnblogs.com/newsss/p/15028250.html
Copyright © 2011-2022 走看看