多对多增删改查

这个Django视图API实现了对ManyToMany字段的增删查改操作。在post方法中,实现了角色(Role)与用户(User)的关联;get方法用于获取用户的角色或角色的用户;put方法更新用户的角色关联;delete方法移除用户与角色的关联。这些操作涵盖了正向和反向关系的处理。
摘要由CSDN通过智能技术生成
class ManyToManyTest(APIView):

    def post(self, request):
        r_name = request.data.get('r_name')
        u_name = request.data.get('u_name')

        if not all([r_name, u_name]):
            return Response({'code': 400})

        # 正向
        user_obj = User.objects.get(username=u_name)
        role_obj = Role.objects.get(role_name=r_name)
        user_obj.roles.add(role_obj)

        # # 反向
        # role_obj = Role.objects.get(role_name=r_name)
        # user_obj = User.objects.get(username=u_name)
        # role_obj.user_set.add(user_obj)

        return Response({"msg": "ok"})

    def get(self, request):

        u_id = request.query_params.get('u_id')
        r_id = request.query_params.get('r_id')

        if not all([u_id, r_id]):
            return Response({'code': 400})

        # 正向
        # user_obj = User.objects.get(id=u_id)
        # role_obj = user_obj.roles.all()
        # ser_obj = RoleSerializer(role_obj, many=True)

        # 反向
        role_obj = Role.objects.get(id=r_id)
        user_obj = role_obj.user_set.all()
        ser_obj = UserSer(user_obj, many=True)

        return Response({'code': 200, 'data': ser_obj.data})

    def put(self, request):
        u_id = request.query_params.get('u_id')
        r_id = request.query_params.get('r_id')

        if not all([u_id, r_id]):
            return Response({'code': 400})

        # 正向
        # user_obj = User.objects.filter(id=u_id).first()
        # role_obj = Role.objects.filter(id=r_id)
        # user_obj.roles.set(role_obj)

        # 反向
        user_obj = User.objects.filter(id=u_id)
        role_obj = Role.objects.filter(id=r_id).first()
        role_obj.user_set.set(user_obj)
        return Response({'mag': 'ok', 'code': 200})

    def delete(self, request):
        u_id = request.query_params.get('u_id')
        r_id = request.query_params.get('r_id')

        if not all([u_id, r_id]):
            return Response({'code': 400, 'msg': '参数不完整'})
        # 正向
        user_obj = User.objects.filter(id=u_id).first()
        role_obj = Role.objects.filter(id=r_id).first()
        user_obj.roles.remove(role_obj)

        # 反向
        # user_obj = User.objects.all()
        # role_obj = Role.objects.filter(id=r_id).first()
        # role_obj.user_set.remove(*user_obj)

        return Response({'code': 200, 'data': '删除成功'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值