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:
@@ -77,12 +77,23 @@ class PrintingOrderFilterSet(django_filters.FilterSet):
|
|||||||
outgoing_date_from = django_filters.DateFilter(field_name='outgoing_date', lookup_expr='gte')
|
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')
|
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_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:
|
class Meta:
|
||||||
model = models.PrintingOrder
|
model = models.PrintingOrder
|
||||||
fields = ['customer', 'is_urgent', 'is_fabric_received', 'is_invalid']
|
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')
|
@method_decorator(cache_page(20), name='list')
|
||||||
class PrintingOrderViewSet(LimitedModelViewSet):
|
class PrintingOrderViewSet(LimitedModelViewSet):
|
||||||
@@ -552,16 +563,38 @@ class PlateOrderFilterSet(django_filters.FilterSet):
|
|||||||
fabric = django_filters.CharFilter(lookup_expr='icontains')
|
fabric = django_filters.CharFilter(lookup_expr='icontains')
|
||||||
style_name = 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_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_from = IsoDateTimeFilter(field_name='required_completion_date', lookup_expr='gte')
|
||||||
required_completion_date_to = IsoDateTimeFilter(field_name='required_completion_date', lookup_expr='lte')
|
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_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:
|
class Meta:
|
||||||
model = models.PlateOrder
|
model = models.PlateOrder
|
||||||
fields = ['customer', 'salesperson', 'merchandiser', 'urgency_level', 'is_invalid', 'is_ordered']
|
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):
|
def _plate_order_last_modified(request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ class LimitedLimitOffsetPagination(LimitOffsetPagination):
|
|||||||
"""
|
"""
|
||||||
带最大限制的 LimitOffsetPagination
|
带最大限制的 LimitOffsetPagination
|
||||||
|
|
||||||
- 默认每页返回 100 条
|
- 默认每页返回 500 条
|
||||||
- 最大每页返回 100 条
|
- 最大每页返回 500 条
|
||||||
- 防止前端请求过多数据
|
- 防止前端请求过多数据
|
||||||
"""
|
"""
|
||||||
default_limit = 300
|
default_limit = 500
|
||||||
max_limit = 300
|
max_limit = 500
|
||||||
|
|
||||||
|
|
||||||
class LimitedModelViewSet(viewsets.ModelViewSet):
|
class LimitedModelViewSet(viewsets.ModelViewSet):
|
||||||
|
|||||||
Reference in New Issue
Block a user