1
0
forked from erp-dev/erp

fix: plate_date_from and plate_date_to query fixed range for plate_order query api

This commit is contained in:
2025-12-30 11:31:53 +08:00
parent 82dbdfb35e
commit 138983fa4e
2 changed files with 40 additions and 7 deletions

View File

@@ -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):
"""