多对多表添加修改以及序列化器

views.py:

class UserAddView(APIView):
    def post(self, request):
        data = request.data
        user_ser = UserSer(data=data)
        if user_ser.is_valid():
            user_ser.save()
            return Response(user_ser.data)
        else:
            return Response({'msg': '数据不合法'})
    
    def put(self, request):
        uid = request.data.get('id')
        print(request.data)
        user_obj = User.objects.filter(pk=uid).first()
        ser_obj = UserSer(instance=user_obj, data=request.data)
        if ser_obj.is_valid():
            ser_obj.save()
            return Response({'msg': '修改成功', 'data': request.data})
        print(ser_obj.errors)
        return Response({'msg': '数据不合法'})

serializers.py

class UserSer(serializers.Serializer):
    username = serializers.CharField(max_length=64)
    age = serializers.IntegerField()
    home = serializers.CharField(max_length=64)
    hight = serializers.CharField(max_length=64)
    # classrooms = serializers.PrimaryKeyRelatedField(read_only=True)   # 展示id
    # classrooms = serializers.StringRelatedField(read_only=True)   # 展示名称
    # classrooms = ClassroomSer(read_only=True)   # 展示全部数据
    classrooms = serializers.IntegerField(write_only=True)  # 只允许写操作
    roles = serializers.ListField(write_only=True)	# 因为可以写入多个角色,所以要使用ListField

    def create(self, validated_data):
        # 获取一对多表的外键
        id = validated_data.pop("classrooms")
        # 获取多对多的对应关系
        roles_list = validated_data.pop("roles")
        # 创建user表信息,并带上外键
        user_obj = User.objects.create(classrooms_id=id, **validated_data)
        # 查询出符合规范的角色信息
        role_obj = Role.objects.filter(id__in=roles_list)
        # 往第三张表添加数据
        user_obj.roles.add(*role_obj)
        return user_obj
        
    def update(self, instance, validated_data):
        instance.username = validated_data.get('username', instance.username)
        instance.age = validated_data.get('age', instance.age)
        instance.home = validated_data.get('home', instance.home)
        instance.hight = validated_data.get('hight', instance.hight)
        instance.classrooms_id = validated_data.get('classrooms',instance.classrooms_id)

        user_obj = User.objects.get(id=instance.id)
        role_obj = Role.objects.filter(id__in=validated_data['roles'])
        user_obj.roles.set(role_obj)
        instance.save()
        return instance
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值