diff --git a/backend/dvadmin/utils/filters.py b/backend/dvadmin/utils/filters.py index 72915a8..cb61630 100644 --- a/backend/dvadmin/utils/filters.py +++ b/backend/dvadmin/utils/filters.py @@ -23,6 +23,36 @@ from rest_framework.filters import BaseFilterBackend from dvadmin.system.models import Dept, ApiWhiteList, RoleMenuButtonPermission from dvadmin.utils.models import CoreModel +class CoreModelFilterBankend(BaseFilterBackend): + """ + 自定义时间范围过滤器 + """ + def filter_queryset(self, request, queryset, view): + create_datetime_after = request.query_params.get('create_datetime_after', None) + create_datetime_before = request.query_params.get('create_datetime_before', None) + update_datetime_after = request.query_params.get('update_datetime_after', None) + update_datetime_before = request.query_params.get('update_datetime_after', None) + if any([create_datetime_after, create_datetime_before, update_datetime_after, update_datetime_before]): + create_filter = Q() + if create_datetime_after and create_datetime_before: + create_filter &= Q(create_datetime__gte=create_datetime_after) & Q(create_datetime__lte=create_datetime_before) + elif create_datetime_after: + create_filter &= Q(create_datetime__gte=create_datetime_after) + elif create_datetime_before: + create_filter &= Q(create_datetime__lte=create_datetime_before) + + # 更新时间范围过滤条件 + update_filter = Q() + if update_datetime_after and update_datetime_before: + update_filter &= Q(update_datetime__gte=update_datetime_after) & Q(update_datetime__lte=update_datetime_before) + elif update_datetime_after: + update_filter &= Q(update_datetime__gte=update_datetime_after) + elif update_datetime_before: + update_filter &= Q(update_datetime__lte=update_datetime_before) + # 结合两个时间范围过滤条件 + queryset = queryset.filter(create_filter & update_filter) + return queryset + return queryset def get_dept(dept_id: int, dept_all_list=None, dept_list=None): """ diff --git a/backend/dvadmin/utils/viewset.py b/backend/dvadmin/utils/viewset.py index 2cd6145..b85007a 100644 --- a/backend/dvadmin/utils/viewset.py +++ b/backend/dvadmin/utils/viewset.py @@ -14,7 +14,7 @@ from drf_yasg.utils import swagger_auto_schema from rest_framework.decorators import action from rest_framework.viewsets import ModelViewSet -from dvadmin.utils.filters import DataLevelPermissionsFilter +from dvadmin.utils.filters import DataLevelPermissionsFilter, CoreModelFilterBankend from dvadmin.utils.import_export_mixin import ExportSerializerMixin, ImportSerializerMixin from dvadmin.utils.json_response import SuccessResponse, ErrorResponse, DetailResponse from dvadmin.utils.permission import CustomPermission @@ -23,18 +23,6 @@ from dvadmin.system.models import FieldPermission, MenuField from django_restql.mixins import QueryArgumentsMixin -class CoreModelFliterSet(FilterSet): - """ - 封装一个时间范围过滤器: - 使用方式: - {'create_datetime_after': '2024-01-01 8:00', 'create_datetime_before': '2024-01-05 10:00'} - """ - create_datetime = DateTimeFromToRangeFilter() - update_datetime = DateTimeFromToRangeFilter() - class Meta: - model = None - fields = "__all__" - class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMixin, QueryArgumentsMixin): """ 自定义的ModelViewSet: @@ -51,7 +39,7 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi update_serializer_class = None filter_fields = '__all__' search_fields = () - extra_filter_class = [DataLevelPermissionsFilter] + extra_filter_class = [CoreModelFilterBankend,DataLevelPermissionsFilter] permission_classes = [CustomPermission] import_field_dict = {} export_field_label = {}