DRF序列化器入参data缺对应字段键时字段级校验是否会被调用
结论
如果传入序列化器的data字典完全没有my_field_name对应的键,对应的validate_my_field_name()方法默认不会被调用。
具体执行逻辑
DRF序列化器的is_valid()执行时会按照固定流程跑校验,缺键的场景下有两种分支,都不会走到自定义字段校验方法:
- 对于序列化器中定义的字段(DRF内置字段默认
required=True):如果入参缺失对应键,会直接触发「字段必填」的基础校验报错,整个校验流程直接终止,根本不会进入自定义钩子的执行环节。 - 对于主动设置
required=False的非必填字段:如果入参缺失对应键,DRF会直接给该字段赋值预设的默认值(没配默认值就赋None),因为没有接收到用户主动传入的该字段的键值,不会触发绑定在该字段上的自定义validate_<字段名>()方法。
容易踩的坑
很多开发者会误以为非必填字段的默认值也会过一遍自定义字段校验,实际上只要用户入参没带这个键,哪怕最终序列化结果带上了默认值,自定义字段级校验方法也不会运行。
只有当入参字典里明确传入了这个字段的键(哪怕值是None、空字符串这类空值),对应的自定义字段校验方法才会被触发执行。
内容的提问来源于stack exchange,提问作者Vikramark
相关产品推荐
相关产品推荐

