关于普通序列化器和模型序列化器
1:普通序列化器
众所周知Response不能直接返回orm对象的,所以需要我们进行序列化 *** 作,可以通过手动将其转为字典或JSON,也可以使用DRF所提供的序列化器
####下面的是代码模块
import re
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
# 部门的序列化器
from users.models import Department, Duty, Staff
class DepartmentSer(serializers.Serializer):
#read_only=True 只做序列化输出
id = serializers.IntegerField(label='部门编号',read_only=True)
#三种基本的校验约束 # max_length=(数字,数值) 最大长度 min_length= 最小长度 allow_null=True允许为空 trim_whitespace=True反序列的时候输入数据库去掉两旁空格
name = serializers.CharField(label='部门名称',max_length=50,min_length=2,allow_null=True,trim_whitespace=True)
#全局校验
def validate(self,data):
print('正在进行校验:',data)
...
return data
#校验不通过
# raise ValidationError
#重写create方法
def create(self, validated_data):
#保存数据 **就是把里面东西解出来
dep = Department.objects.create(**validated_data)
return dep
#重写update方法
def update(self, instance, validated_data):
instance.name = validated_data['你要进行重编的字段名称'] ----列如我的是name,那就是['name'],还有另一种办法用的get,我现在用的是参考与-----地址在下面
instance.save()
return instance
##在编写代码的过成中你还可以进行一些校验,已达到对某些特殊字段进行一个约束的作用,一共有三种校验方式,全局>>列如我代码块里的 2:局部 推荐使用局部 3:在字段里对其进行限制,在字段外定义,字段里进行限制,类似于单个字段
def a(name):
return name
# 职务类-
class DutySer(serializers.Serializer):
id = serializers.IntegerField(label='职务编号',read_only=True)
name = serializers.CharField(label='部门名称',max_length=50,min_length=2,allow_null=True,trim_whitespace=True,
validators=[a,])
# validators=[a,] 指明字段 []里面写以什么开始 ----对于这个我也不是很了解 只能按照我自己想的跟大家说了
但是普通序列化器有一个很大的不足之处,就是如果你的代码字段多了以后,工作量和代码量就会变的很大,这样对于我们出错的几率也会变的很大,并且有关于时间和有关于时间DateTimeField DateField 等字段类型的序列化直接通过JOSN也是不行的
2: 模型序列化器刚刚讲了普通序列化器,对于模型类字段少的,还行,但是多的话,还是建议大家使用模型序列化器,模型类序列化器可以更加方便的进行字段映射以及内置方法的编写
其优点:
1:基于模型类自动生成的一些列字段
2:自动生成的系列字段,同时还包含unique max_length等属性校验
3:不需要在重写的create和update方法
4:明天我在说吧
参考链接----如果你报错可以去参考一下序列化类用的serializer报错update() must be implemented_只因为你而温柔的博客-CSDN博客p序列化类用的serializer, 修改数据时报错update() must be implemented.源码解决方法重写序列化类里的update方法class ShopCartSerializer(serializers.Serializer):"""购物车序列化类"""# 因为我们模型类设置了unique_together 我们在这里用ModelSerializer# ...https://blog.csdn.net/zsx1314lovezyf/article/details/101364225普通序列化器的导入方式
from rest_framework import serializers
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)