Django-反序列化

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})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值