from django.utils.decorators import method_decorator from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema from rest_framework.decorators import action from rest_framework.permissions import IsAuthenticated from rest_framework.viewsets import ModelViewSet from ERP_5.utils.base_views import MultipleDestroyMixin from ERP_5.utils.paginations import GlobalPagination from erp_system.models import DeptModel from erp_system.serializers.dept_serializer import DeptSerializer # 定义好了一个swagger的参数 pid_param = openapi.Parameter(name='pid', in_=openapi.IN_QUERY, description='父部门的ID', required=False, type=openapi.TYPE_INTEGER) @method_decorator(name='list', decorator=swagger_auto_schema( manual_parameters=[pid_param], operation_description="查询部门的树形结构数据, pid=0或者不传pid表示查询顶级机构的树。") ) class DeptViewSet(ModelViewSet, MultipleDestroyMixin): """ create: 部门机构--新增 部门机构新增, status: 201(成功), return: 新增部门机构信息 destroy: 部门机构--删除 部门机构删除, status: 204(成功), return: None multiple_delete: 部门机构--批量删除,必传参数:ids=[1,2,3,4...] 部门机构批量删除, status: 204(成功), return: None update: 部门机构--修改,不能修改部门机构,只是修改部门机构名字。 部门机构修改, status: 200(成功), return: 修改后的部门机构信息 partial_update: 部门机构--局部修改(部门机构批量授权),只能真的某一个部门机构一次性授权,之前的的授权会被覆盖 部门机构批量授权, status: 200(成功), return: 修改后的部门机构信息 list: 部门机构--获取列表, 如果传参pid=0或者pid不传,则查询所有顶级部门列表, 如果传参pid=具体的值,则查询某个父部门下的所有子部门 部门机构列表信息, status: 200(成功), return: 部门机构信息列表 retrieve: 查询某一个部门机构 查询指定ID的部门机构, status: 200(成功), return: 用户部门机构 """ def get_queryset(self): if self.action == 'list': q = self.request.query_params.get('pid', None) if q: # 参数中有pid pid = int(q) if pid == 0: return DeptModel.objects.filter(parent__isnull=True).all() else: return DeptModel.objects.filter(parent__id=pid).all() else: return DeptModel.objects.filter(parent__isnull=True).all() else: return DeptModel.objects.all() queryset = DeptModel.objects.all() serializer_class = DeptSerializer pagination_class = GlobalPagination # permission_classes = [IsAuthenticated] # @swagger_auto_schema(method='GET', manual_parameters=[pid_param]) # @action(methods=['GET'], detail=False) # def find(self, request, *args, **kwargs): # return super(DeptViewSet, self).list(request, *args, **kwargs)