serializers的局部和全局钩子

局部和全局钩子

**序列化类**
# 无论新增还是修改,只要执行ser.is_valid()就会触发校验
# 牢牢记住:先走字段自己的校验规则---》再走局部钩子---》再走全局钩子



# 写在序列化类中的局部钩子函数,校验单个字段
# 写在序列化类中的全局钩子函数,校验所有字段


    # 局部钩子,校验书名不能以sb开头   forms组件没有,validate有
    def validate_name(self,name):
        # name就是  要校验的字段对应的前端传入的值
        if name.startswith('sb'):
            # 校验失败,抛异常
            raise ValidationError('不能以sb开头')
        else:
            return name


    # 全局钩子
    def validate(self, attrs):
        # attrs 校验过后的数据---》字段自己校验完后,局部钩子走完过的数据
        name=attrs.get('name')
        price=attrs.get('price')
        # 加判断,如果通过,就返回attrs
        # 如果不通过就抛异常
        if name == price:
            raise ValidationError('名字和价格不能一样')
        else:
            return attrs
posted @ 2022-06-17 18:11  春游去动物园  阅读(52)  评论(0编辑  收藏  举报