diff --git a/dvadmin-backend/apps/vadmin/op_drf/filters.py b/dvadmin-backend/apps/vadmin/op_drf/filters.py index 8b06305..ed99b93 100644 --- a/dvadmin-backend/apps/vadmin/op_drf/filters.py +++ b/dvadmin-backend/apps/vadmin/op_drf/filters.py @@ -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 diff --git a/dvadmin-backend/apps/vadmin/permission/filters.py b/dvadmin-backend/apps/vadmin/permission/filters.py index a6f6809..bf302b1 100644 --- a/dvadmin-backend/apps/vadmin/permission/filters.py +++ b/dvadmin-backend/apps/vadmin/permission/filters.py @@ -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 diff --git a/dvadmin-backend/apps/vadmin/utils/model_util.py b/dvadmin-backend/apps/vadmin/utils/model_util.py index 9c2921d..e05094a 100644 --- a/dvadmin-backend/apps/vadmin/utils/model_util.py +++ b/dvadmin-backend/apps/vadmin/utils/model_util.py @@ -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模型的映射操作,例如