DRF--序列化器对字段错误提示自定义error_messages,对关联字段的定义

目录​​​​​​​

1.序列化器字段属性中error_messages自定义错误提示

2.序列化器对关联字段的序列化输出定义(通过父表获取从表数据)

3. 自定以输出关联字段

 4.序列化器对关联字段的序列化输出定义(通过从表表获取父表数据)


1.序列化器字段属性中error_messages自定义错误提示

        1.1 可以在序列化器的任意字段上使用error_messages={"key1":"value1","key2":"value2"}

                参数来指定自定义需要返回的反序列化校验失败的数据错误提示信息

        1.2 使用需要被校验的字段名作为key,对应自定义错误提示信息作为value

2.序列化器对关联字段的序列化输出定义(通过父表获取从表数据)

        2.1 序列化器中可以使用PrimaryKeyRelatedField()来获取关联表的外键值

        2.2 若通过父表后去从表数据,默认需要使用从表模型类名小写_set作为序列化器类中

                关联字段名称

        2.3 若从表中的外键定义了related_name参数值,则在序列化器中需要使用related_name的值

                作为关联查询的序列化字段,如此处的related_name='inter',

                序列化器中关联字段应为inter

        2.4 PrimaryKeyRelatedField()字段,要么指定read_only=True,要么指定queryset参数,否则

                报错,如果指定了read_only=True,那么该字段只序列化输出,如果从表会返回多个值,

                需要指定many=True;

获取的数据

        2.5 如果该字段需要反序列化输入,则需指定了queryset参数(关联表的查询集对象),意思

                指定反序列化时的对象示例必须在哪个表里面,用于对参数进行校验。前端传入关联字

                段值时,会将关联的queryset的查询集取出来,然后去对比前端传入的值是否在此查询

                集汇中,以此校验;

3. 自定以输出关联字段

        2中默认通过外键(id)作为关联返回的字段,如果想指定返回从表中的某个字段呢,该如何做 ?

        3.1 返回从表中的__str__方法的数据

                3.1.1 使用serializers.StringRelatedField(many=True)返回__str__方法中的数据,

                        该字段默认添加了read_only=True

         3.2 返回从表中的指定字段

                3.2.1 使用serializers.SlugRelatedField(slug_field='xxxx', many=True, read_only=True)

                        获取从表中的指定字段值序列化输出,只能操作一个字段。

                 输出:

                3.2.2  使用serializers.SlugRelatedField(slug_field='xxxx', many=True,

                         queryset=Interfaces.objects.all())对关联字段进行反序列化输入并校验,同时关联

                        字段必须是唯一约束。

                 反序列化输入

         

3.3 获取从表的多个段信息

        需要定义从表的序列化器类,在定义的从表序列化器类中定义从表要操作的多个字段,因为此序列化器类属于Field的子类,所以可以作为字段属性赋值给主表的序列化器类,这样就可以返回从表的多个字段信息了。

        3.1 定义从表模型类对应的序列化器类

        3.2 将从表的序列化器类赋值给主表序列化器类的xxxx_set字段

                3.2.1 若指定read_only=True,则只序列化输出

                3.2.2 若指定queryset=Interfaces.objects.all(),则反序列化输入校验

         3.3 前端请求,查看返回的信息

 4.序列化器对关联字段的序列化输出定义(通过从表表获取父表数据)

        4.1 通过从表获取父表数据,在从表序列化器类中定义 从表模型类中定义的外键_id字段

                4.1.1 通过write_only=True,控制该字段只反序列化输入校验,不序列化输出

                反序列化校验后入库了

 

                4.1.2 通过read_only=True,控制该字段序列输出,不能反序列化输出入

                 输出

 

                 4.1.4 定义序列化器类作为字段属性传给从表序列化器类,控制多字段输出                

                 输出

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值