diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index d7cd9f3..32464f5 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -1,3 +1,4 @@ +import re import pytz from rest_framework.generics import ( ListAPIView, @@ -5,6 +6,7 @@ from rest_framework.generics import ( CreateAPIView ) from django.utils.timezone import timedelta, datetime +from rest_framework.response import Response from rest_framework import filters from rest_framework.pagination import PageNumberPagination from django_filters.rest_framework import DjangoFilterBackend @@ -77,6 +79,8 @@ class DeviceTempLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin): def get_queryset(self, *args, **kwargs): user_roles = self.get_role() + start = self.request.GET.get('start') + end = self.request.GET.get('end') queryset = DeviceTempLog.objects.get_queryset().order_by('create_time') if 'staff' in user_roles or 'manager' in user_roles: @@ -88,4 +92,14 @@ class DeviceTempLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin): t = datetime.now().replace(tzinfo=pytz.timezone('UTC')) - timedelta(days=1) queryset = queryset.filter(last_time__gte=t).filter(last_time__minute=0) + if start and end: + t_pattern = re.compile(r'^2\d{3}-\d{1,2}-\d{1,2}$') + start_m = t_pattern.match(start) + end_m = t_pattern.match(end) + if not start_m or not end_m: + return Response({'detail': 'start or end must be format "yyyy-mm-dd"'}) + start = datetime.strptime(start, '%Y-%m-%d') + end = datetime.strptime(end, '%Y-%m-%d') + queryset = queryset.filter(last_time__gte=start, last_time__lt=end + timedelta(days=1)) + return queryset