feat: enstat增加start_time和end_time的查询条件
This commit is contained in:
parent
2f42d8386e
commit
959e3e3d8d
|
@ -1,8 +1,12 @@
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from apps.enm.models import MpointStat, EnStat
|
from apps.enm.models import MpointStat, EnStat
|
||||||
|
from datetime import datetime
|
||||||
|
from django.db.models import F, Q
|
||||||
|
|
||||||
class MpointStatFilter(filters.FilterSet):
|
class MpointStatFilter(filters.FilterSet):
|
||||||
has_create_by = filters.BooleanFilter(method='filter_has_create_by')
|
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:
|
class Meta:
|
||||||
model = MpointStat
|
model = MpointStat
|
||||||
fields = {
|
fields = {
|
||||||
|
@ -32,8 +36,57 @@ class MpointStatFilter(filters.FilterSet):
|
||||||
queryset = queryset.filter(create_by=None)
|
queryset = queryset.filter(create_by=None)
|
||||||
return queryset
|
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):
|
class EnStatFilter(filters.FilterSet):
|
||||||
|
start_time = filters.CharFilter(method='filter_start_time')
|
||||||
|
end_time = filters.CharFilter(method='filter_end_time')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EnStat
|
model = EnStat
|
||||||
fields = {
|
fields = {
|
||||||
|
@ -48,5 +101,55 @@ class EnStatFilter(filters.FilterSet):
|
||||||
"year_s": ["exact"],
|
"year_s": ["exact"],
|
||||||
"year": ["exact"],
|
"year": ["exact"],
|
||||||
"month": ['exact'],
|
"month": ['exact'],
|
||||||
|
"day_s": ["exact"],
|
||||||
|
"day": ["exact"],
|
||||||
"hour": ['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
|
Loading…
Reference in New Issue