serializers.py文件中
员工的序列化器
class StaffSer(serializers.Serializer):
id = serializers.IntegerField(label='ID', read_only=True)
name = serializers.CharField(label='员工名称', min_length=2, max_length=10,
allow_blank=True, allow_null=True, trim_whitespace=True)
sex = serializers.IntegerField(label='性别', default=1)
phone = serializers.CharField(label='手机号', min_length=11, max_length=11,
allow_null=True, allow_blank=True, trim_whitespace=True)
# 外键
department = serializers.PrimaryKeyRelatedField(queryset=Department.objects.all())
duty = serializers.PrimaryKeyRelatedField(queryset=Duty.objects.all())
# 序列化字段
department_name = serializers.SerializerMethodField(read_only=True)
def get_department_name(self, obj):
return obj.department.name
duty_name = serializers.SerializerMethodField(read_only=True)
def get_duty_name(self, obj):
return obj.duty.name
# 添加条件
def validate(self, attrs):
name = attrs.get('name')
...
phone = attrs.get('phone')
# phone = '123'
# 需要导入
from rest_framework.exceptions import ValidationError
if not phone.startswith('13'):
raise ValidationError('手机号不符合')
return attrs
# 添加数据-重写
def create(self, validated_data):
staff = Staff.objects.create(**validated_data)
return staff
# 修改数据-重写
def update(self, instance, validated_data):
instance.name = validated_data.get('name')
instance.save()
return instance
views.py文件中
添加员工信息
def post(self, request):
name = request.data.get('name')
# 判断员工是否存在
staff = Staff.objects.filter(name=name)
if staff:
return Response('员工已存在')
ser = StaffSerializers(data=request.data)
# 校验数据
if ser.is_valid():
# 保存数据
ser.save()
return Response({'code': 200, 'msg': '添加成功'})
else:
return Response({'code': 400, 'msg': ser.errors})
修改员工信息
def put(self, request, pk):
# 判断员工是否存在
staff = Staff.objects.filter(id=pk).first()
ser = StaffSer(instance=staff, data=request.data, partial=True)
# 验证信息
if ser.is_valid():
ser.save()
return Response({'code': 200, 'msg': '更新成功'})
else:
return Response({'code': 400, 'msg': ser.errors})