# 添加时间过滤

This commit is contained in:
xianfuxing 2020-05-29 17:04:56 +08:00
parent 08eefbf2c1
commit 036a8b5fa0
1 changed files with 24 additions and 4 deletions

View File

@ -1,5 +1,6 @@
import re
import pytz
from datetime import datetime, time
from datetime import datetime, time, timedelta
from django.db.models import Sum, Max
from django.core.cache import cache
from rest_framework.generics import (
@ -27,6 +28,7 @@ from .serializers import (
from ..mixins.role import RoleMixin, DeviceListMixin
from ..models import DeviceCount, DeviceInfo
from mosquito.models import MosqPostStatistic, DevicePostStatistic
from mosquito.models import DeviceInfo as CelexDeviceInfo
class DeviceLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
@ -38,14 +40,32 @@ class DeviceLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
def get_queryset(self, *args, **kwargs):
user_roles = self.get_role()
device = self.request.GET.get('device')
start = self.request.GET.get('start')
end = self.request.GET.get('end')
queryset = DeviceCount.objects.get_queryset().order_by('-data_time')
if 'staff' in user_roles or 'manager' in user_roles:
device_list = self.get_device_list()
device_ids = [query.device_id for query in device_list if query.org == self.request.user.org]
queryset = queryset.filter(device_id__in=device_ids)
device_id = self.request.GET.get('device_id')
if device_id:
queryset = queryset.filter(device_id__icontains=device_id)
if device:
# device_id or device_name
qs = queryset.filter(device_id__icontains=device)
if qs.count() > 0:
queryset = qs
else:
qs = CelexDeviceInfo.objects.filter(device_name__contains=device)
device_ids = [device.device_id for device in qs]
queryset = queryset.filter(device_id__in=device_ids)
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(data_time__gte=start, data_time__lt=end + timedelta(days=1))
return queryset