def post(self, request, pk, user_id, action):
        community = get_object_or_404(Community, pk=pk, valid=True)
        self.check_object_permissions(request, community)

        if community.members.filter(id=user_id, membership__valid=True):
            raise NotAcceptable('此成员已经通过审核。')
        elif not community.members.filter(id=user_id):
            raise NotAcceptable('此成员不在审核列表上。')

        member = community.membership_set.get(user_id=user_id)
        related_user = community.members.get(id=user_id)
        subtype_ca = 1
        subtype_c_ap = 2
        with transaction.atomic():
            if action == 'allow':
                description = '加入社团请求被通过。'
                NoticeManager.create_notice_CA(related_user, community,
                                               subtype_ca, description)
                NoticeManager.create_notice_C_AP(related_user, community,
                                                 subtype_c_ap)

                member.valid = True
                member.save()
            elif action == 'deny':
                description = '加入社团请求被拒绝。'
                NoticeManager.create_notice_CA(related_user, community,
                                               subtype_ca, description)

                member.delete()
            else:
                raise NotAcceptable('错误的操作。')

        return Response(status=status.HTTP_200_OK)
 def deny(self, request, *args, **kwargs):
     invitation = self.get_object()
     with transaction.atomic():
         NoticeManager.create_notice_C_AP(
             related_user=invitation.user,
             related_community=invitation.community,
             subtype=0)
         invitation.delete()
     return Response(status=status.HTTP_204_NO_CONTENT)
 def accept(self, request, *args, **kwargs):
     invitation = self.get_object()
     community = invitation.community
     with transaction.atomic():
         community.members.add(invitation.user,
                               through_defaults={'valid': True})
         NoticeManager.create_notice_C_AP(
             related_user=invitation.user,
             related_community=invitation.community,
             subtype=3)
         invitation.delete()
     return Response(status=status.HTTP_204_NO_CONTENT)