04 DRF的Serializer和ModelSerializer的区别
主要内容 | 标题 | Serializer | ModelSerializer |
Field | 常用Field | CharField,IntegerField,BooleanField,DateTimeField,ChoiceField | |
参数 | required,read_only,write_only,allow_null/allow_blank,label,help_text,error_messages,context,source | ||
定义 | 字段的书写 | 手动写跟Model匹配的所有字段 | 在Meta中写参数fields/exclude去自动匹配 |
Save Instance | serializer.save(),他调用了serializer的create和update方法 | ||
当post请求时,需要重写create()方法 | ModelSerializer已经封装了这两个方法,如果需要额外定义,可以重载这两个方法 | ||
当patch/put请求时,需要重写update()方法 | |||
validate | is_valid | 验证成功,数据保存在serializer.validated_data中 | |
验证失败,错误消息在serializer.error中 | |||
Validation自定义验证 | 单独的validate | 对某个字段进行自定义验证逻辑,重载validate_<field-name>方法,参数是value | |
联合validate | 对多个字段进行自定义的验证,重载validate()方法,参数是attrs字典 | ||
validators | 对所有的字段进行自定义的验证,参数是value,在字段增加validators=[my_validaror]参数 | ||
异常 | 自定义验证不通过的,可以手动抛出serializer.ValidationError("错误消息") | ||
外键的serializers | 正向 | 通过正向字段嵌套serializer,获取外键的全部内容 | ModelSerializer可以通过在Meta中配置depath参数来获得关联的深度 |
反向 | 通过向related_name嵌套serializer,获取外键的全部内容 | ||
SerializerMethodField | 自定义要获取的字段内容,用get_<field-name>钩子来自定义内容 |
sdf