# 添加时间过滤

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