diff --git a/api_v1/views/printing/views.py b/api_v1/views/printing/views.py index 6f53a24..c6831ac 100644 --- a/api_v1/views/printing/views.py +++ b/api_v1/views/printing/views.py @@ -77,12 +77,23 @@ class PrintingOrderFilterSet(django_filters.FilterSet): outgoing_date_from = django_filters.DateFilter(field_name='outgoing_date', lookup_expr='gte') outgoing_date_to = django_filters.DateFilter(field_name='outgoing_date', lookup_expr='lte') created_date_from = django_filters.DateFilter(field_name='created_at', lookup_expr='gte') - created_date_to = django_filters.DateFilter(field_name='created_at', lookup_expr='lte') + created_date_to = django_filters.DateFilter(field_name='created_at', method='filter_created_date_to') class Meta: model = models.PrintingOrder fields = ['customer', 'is_urgent', 'is_fabric_received', 'is_invalid'] + def filter_created_date_to(self, queryset, name, value): + """ + 过滤 created_at <= 指定日期的 23:59:59.999999 + 使用 lt 次日 00:00:00 实现,确保包含整天 + """ + if value: + from datetime import timedelta + next_day = value + timedelta(days=1) + return queryset.filter(created_at__lt=next_day) + return queryset + @method_decorator(cache_page(20), name='list') class PrintingOrderViewSet(LimitedModelViewSet): @@ -552,16 +563,38 @@ class PlateOrderFilterSet(django_filters.FilterSet): fabric = django_filters.CharFilter(lookup_expr='icontains') style_name = django_filters.CharFilter(lookup_expr='icontains') plate_date_from = django_filters.DateFilter(field_name='plate_date', lookup_expr='gte') - plate_date_to = django_filters.DateFilter(field_name='plate_date', lookup_expr='lte') + plate_date_to = django_filters.DateFilter(field_name='plate_date', method='filter_plate_date_to') required_completion_date_from = IsoDateTimeFilter(field_name='required_completion_date', lookup_expr='gte') required_completion_date_to = IsoDateTimeFilter(field_name='required_completion_date', lookup_expr='lte') created_date_from = django_filters.DateFilter(field_name='created_at', lookup_expr='gte') - created_date_to = django_filters.DateFilter(field_name='created_at', lookup_expr='lte') + created_date_to = django_filters.DateFilter(field_name='created_at', method='filter_created_date_to') class Meta: model = models.PlateOrder fields = ['customer', 'salesperson', 'merchandiser', 'urgency_level', 'is_invalid', 'is_ordered'] + def filter_plate_date_to(self, queryset, name, value): + """ + 过滤 plate_date <= 指定日期的 23:59:59.999999 + 使用 lt 次日 00:00:00 实现,确保包含整天 + """ + if value: + from datetime import timedelta + next_day = value + timedelta(days=1) + return queryset.filter(plate_date__lt=next_day) + return queryset + + def filter_created_date_to(self, queryset, name, value): + """ + 过滤 created_at <= 指定日期的 23:59:59.999999 + 使用 lt 次日 00:00:00 实现,确保包含整天 + """ + if value: + from datetime import timedelta + next_day = value + timedelta(days=1) + return queryset.filter(created_at__lt=next_day) + return queryset + def _plate_order_last_modified(request, *args, **kwargs): """ diff --git a/flower/viewsets.py b/flower/viewsets.py index ce5974a..02cb3ff 100644 --- a/flower/viewsets.py +++ b/flower/viewsets.py @@ -11,12 +11,12 @@ class LimitedLimitOffsetPagination(LimitOffsetPagination): """ 带最大限制的 LimitOffsetPagination - - 默认每页返回 100 条 - - 最大每页返回 100 条 + - 默认每页返回 500 条 + - 最大每页返回 500 条 - 防止前端请求过多数据 """ - default_limit = 300 - max_limit = 300 + default_limit = 500 + max_limit = 500 class LimitedModelViewSet(viewsets.ModelViewSet):