def update(self, request, *args, **kwargs): # pylint: disable=unused-argument ''' update user groups ''' user = self.get_object() data = request.data uids = data.get('group_uids', []) subject = data.get('subject', '') update_user_nodes(user, nodes=[], uids=uids, node_type='group', action_subject=subject) return Response(GroupListSerializer(self.get_object()).data)
def patch(self, request, *args, **kwargs): # pylint: disable=unused-argument ''' 调整子组 [PATCH] 操作包括 - 排序sort - 移动add, 即修改父部门。从无到有的添加,由create负责 ''' parent_group = self.get_object() data = json.loads(request.body.decode('utf-8')) subject = data.get('subject', '') if subject not in ['sort', 'add']: raise ValidationError( {'subject': ['this field must be `sort` or `add`']}) filters = {} if subject == 'sort': filters = {'parent': parent_group} group_uids = get_patch_scope(request) try: groups = Group.get_from_pks(pks=group_uids, pk_name='uid', raise_exception=True, **filters) except ObjectDoesNotExist as error: bad_uid = error.args[0] raise ValidationError( {'group_uids': ['group:{} invalid'.format(bad_uid)]}) cli = CLI() if subject == 'sort': cli.sort_groups_in_group(groups, parent_group) elif subject == 'add': for group in groups: cli.move_group_to_group(group, parent_group) return Response(GroupListSerializer(parent_group).data)