添加上级部门查看所有下级部门中的用户

pull/2/head
李强 2021-03-23 20:51:46 +08:00
parent 991b6a7d90
commit 906970f149
3 changed files with 28 additions and 14 deletions

View File

@ -11,6 +11,7 @@ from mongoengine.queryset import visitor
from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter
from ..permission.models import Dept
from ..utils.model_util import get_dept
logger = logging.getLogger(__name__)
@ -147,18 +148,6 @@ class DataLevelPermissionsFilter(BaseFilterBackend):
elif ele == '3':
dept_list.append(user_dept_id)
elif ele == '4':
dept_list.extend(self.get_dept(user_dept_id, Dept.objects.all().values('id', 'parentId')))
dept_list.append(user_dept_id)
dept_list.extend(get_dept(user_dept_id,))
return queryset.filter(dept_belong_id__in=list(set(dept_list)))
def get_dept(self, id, dept_all_list, dept_list=[]):
"""
获取部门的所有下级部门
:param id:
:return:
"""
for ele in dept_all_list:
if ele.get('parentId') == id:
dept_list.append(ele.get('id'))
self.get_dept(ele.get('id'), dept_all_list, dept_list)
return dept_list

View File

@ -1,6 +1,7 @@
import django_filters
from ..permission.models import Menu, Dept, Post, Role, UserProfile
from ..utils.model_util import get_dept
class MenuFilter(django_filters.rest_framework.FilterSet):
@ -53,7 +54,10 @@ class UserProfileFilter(django_filters.rest_framework.FilterSet):
"""
username = django_filters.CharFilter(lookup_expr='icontains')
mobile = django_filters.CharFilter(lookup_expr='icontains')
deptId = django_filters.CharFilter(field_name='dept__id')
deptId = django_filters.CharFilter(method='filter_deptId')
def filter_deptId(self, queryset, name, value):
return queryset.filter(dept__id__in=get_dept(dept_id=value))
class Meta:
model = UserProfile

View File

@ -6,6 +6,8 @@ from django.apps.config import AppConfig
from django.db.models.fields import Field
from rest_framework.renderers import JSONRenderer
from ..permission.models import Dept
def get_primary_field(model, many=False):
"""
@ -63,6 +65,25 @@ def get_model(app_label: str = None, model_name: str = None, model_label: str =
return app_conf.get_model(model_name)
def get_dept(dept_id: int, dept_all_list=None, dept_list=None):
"""
递归获取部门的所有下级部门
:param dept_id: 需要获取的部门id
:param dept_all_list: 所有部门列表
:param dept_list: 递归部门list
:return:
"""
if not dept_all_list:
dept_all_list = Dept.objects.all().values('id', 'parentId')
if dept_list is None:
dept_list = [dept_id]
for ele in dept_all_list:
if ele.get('parentId') == int(dept_id):
dept_list.append(ele.get('id'))
get_dept(ele.get('id'), dept_all_list, dept_list)
return list(set(dept_list))
class ModelRelateUtils:
"""
封装ORM模型的映射操作,例如