需求:
根据不同的账号登录进来显示不同的数据,如:服务器列表,A项目的人员登录只能看到自己项目的服务器数据,超级管理员能看到所有项目的数据。
@method_decorator(login_wrapper, name=‘dispatch‘) class UATSITServerInfoList(generics.ListAPIView): """ 获取UAT/SIT的服务器信息 """ serializer_class = ServerInfoSerializers # 渲染数据方式 renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer) # renderer_classes = [renderers.JSONRenderer] template_name = ‘UAT_SIT_server_list.html‘ # 模糊匹配查询 filterset_class = server_info_filter.ServerInfoFilter def get_queryset(self): """ 先重写get_queryset方法过滤出所需数据,不可以在list中直接给queryset赋值,否则filterset_class过滤器会失效 :return: """ # 根据用户id查出该用户是哪个项目的负责人,再查询对应项目的服务器信息 project_id = Projects.objects.filter(project_manager_id=self.request.session[‘user_id‘]).values("id") project_id_list = [] for i in list(project_id): project_id_list.append(i["id"]) queryset = ServerInfo.objects.exclude(env_type="生产").filter(project_name_id__in=project_id_list).order_by( ‘-update_time‘) return queryset
既然是要过滤数据,那肯定的重写get_queryset()方法,根据登录时写入的session获取到用户id,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息
原文:https://www.cnblogs.com/gcgc/p/14719304.html