From 5510a18280a8a54418a9614e542d2b9498056b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Wed, 3 Jan 2024 23:23:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG:=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E5=AF=BC=E8=87=B4=E7=9A=84=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/utils/viewset.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/dvadmin/utils/viewset.py b/backend/dvadmin/utils/viewset.py index b95dc09..2cd6145 100644 --- a/backend/dvadmin/utils/viewset.py +++ b/backend/dvadmin/utils/viewset.py @@ -52,7 +52,6 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi filter_fields = '__all__' search_fields = () extra_filter_class = [DataLevelPermissionsFilter] - filterset_class = CoreModelFliterSet permission_classes = [CustomPermission] import_field_dict = {} export_field_label = {} From 6f5bbb045db2e38c9702b4b03b6a89fc6e800666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Thu, 4 Jan 2024 16:53:12 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG:=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E5=AF=BC=E8=87=B4=E7=9A=84=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/utils/filters.py | 30 ++++++++++++++++++++++++++++++ backend/dvadmin/utils/viewset.py | 16 ++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) 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 = {}