局部和全局钩子
**序列化类**
# 无论新增还是修改,只要执行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