feat: enstat增加start_time和end_time的查询条件

This commit is contained in:
caoqianming 2023-08-07 16:00:10 +08:00
parent 2f42d8386e
commit 959e3e3d8d
1 changed files with 105 additions and 2 deletions

View File

@ -1,8 +1,12 @@
from django_filters import rest_framework as filters
from apps.enm.models import MpointStat, EnStat
from datetime import datetime
from django.db.models import F, Q
class MpointStatFilter(filters.FilterSet):
has_create_by = filters.BooleanFilter(method='filter_has_create_by')
start_time = filters.CharFilter(method='filter_start_time')
end_time = filters.CharFilter(method='filter_end_time')
class Meta:
model = MpointStat
fields = {
@ -31,9 +35,58 @@ class MpointStatFilter(filters.FilterSet):
else:
queryset = queryset.filter(create_by=None)
return queryset
def filter_start_time(self, queryset, name, value):
query = self.data
start_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour
if query['type'] in ['hour_s']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gt=start_month) |
Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) |
Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour))
elif query['type'] in ['sflog', 'day_s']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gt=start_month) |
Q(year_s=start_year, month_s=start_month, day_s__gte=start_day))
elif query['type'] in ['month_s', 'month_st']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gte=start_month))
elif query['type'] in ['year_s']:
queryset = queryset.filter(
Q(year_s__gte=start_year))
return queryset
def filter_end_time(self, queryset, name, value):
query = self.data
end_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour
if query['type'] in ['hour_s']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lt=end_month) |
Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) |
Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour))
elif query['type'] in ['sflog', 'day_s']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lt=end_month) |
Q(year_s=end_year, month_s=end_month, day_s__lte=end_day))
elif query['type'] in ['month_s', 'month_st']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lte=end_month))
elif query['type'] in ['year_s']:
queryset = queryset.filter(
Q(year_s__lte=end_year))
return queryset
class EnStatFilter(filters.FilterSet):
start_time = filters.CharFilter(method='filter_start_time')
end_time = filters.CharFilter(method='filter_end_time')
class Meta:
model = EnStat
fields = {
@ -48,5 +101,55 @@ class EnStatFilter(filters.FilterSet):
"year_s": ["exact"],
"year": ["exact"],
"month": ['exact'],
"day_s": ["exact"],
"day": ["exact"],
"hour": ['exact']
}
}
def filter_start_time(self, queryset, name, value):
query = self.data
start_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour
if query['type'] in ['hour_s']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gt=start_month) |
Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) |
Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour))
elif query['type'] in ['sflog', 'day_s']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gt=start_month) |
Q(year_s=start_year, month_s=start_month, day_s__gte=start_day))
elif query['type'] in ['month_s', 'month_st']:
queryset = queryset.filter(
Q(year_s__gt=start_year) |
Q(year_s=start_year, month_s__gte=start_month))
elif query['type'] in ['year_s']:
queryset = queryset.filter(
Q(year_s__gte=start_year))
return queryset
def filter_end_time(self, queryset, name, value):
query = self.data
end_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour
if query['type'] in ['hour_s']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lt=end_month) |
Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) |
Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour))
elif query['type'] in ['sflog', 'day_s']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lt=end_month) |
Q(year_s=end_year, month_s=end_month, day_s__lte=end_day))
elif query['type'] in ['month_s', 'month_st']:
queryset = queryset.filter(
Q(year_s__lt=end_year) |
Q(year_s=end_year, month_s__lte=end_month))
elif query['type'] in ['year_s']:
queryset = queryset.filter(
Q(year_s__lte=end_year))
return queryset