# 添加时间过滤
This commit is contained in:
parent
08eefbf2c1
commit
036a8b5fa0
|
@ -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
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue