feat: mpointvalues 聚合查询bug
This commit is contained in:
parent
9c0160f556
commit
3cfc4393de
|
@ -2,6 +2,7 @@ from django_filters import rest_framework as filters
|
|||
from apps.enm.models import MpointStat, EnStat, EnStat2
|
||||
from datetime import datetime
|
||||
from django.db.models import F, Q
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
|
||||
class MpointStatFilter(filters.FilterSet):
|
||||
|
@ -47,6 +48,8 @@ class MpointStatFilter(filters.FilterSet):
|
|||
|
||||
def filter_start_time(self, queryset, name, value):
|
||||
query = self.data
|
||||
if "type" not in query:
|
||||
raise ParseError("type参数缺失")
|
||||
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", "hour"]:
|
||||
|
@ -72,6 +75,8 @@ class MpointStatFilter(filters.FilterSet):
|
|||
|
||||
def filter_end_time(self, queryset, name, value):
|
||||
query = self.data
|
||||
if "type" not in query:
|
||||
raise ParseError("type参数缺失")
|
||||
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", "hour"]:
|
||||
|
|
|
@ -214,13 +214,15 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, CustomListM
|
|||
测点统计数据聚合查询
|
||||
"""
|
||||
qs = self.filter_queryset(self.get_queryset())
|
||||
group_by = request.query_params.get("group_by", None)
|
||||
group_by_fields = ['mpoint']
|
||||
if group_by:
|
||||
group_by_fields.append(group_by)
|
||||
group_by = request.query_params.get("group_by", "")
|
||||
group_by_list = group_by.split(",")
|
||||
group_by_list.remove("")
|
||||
if 'mpoint' not in group_by_list:
|
||||
group_by_list.append('mpoint')
|
||||
qs = qs.values()
|
||||
qs = qs.order_by()
|
||||
aggreagte_qs = qs.values(*group_by_fields).annotate(total_val = Sum('val')).values('mpoint__name', 'total_val', 'mpoint__nickname', 'mpoint__unit', 'val_level')
|
||||
display_fields = ['mpoint__name', 'total_val', 'mpoint__nickname', 'mpoint__unit'] + group_by_list
|
||||
aggreagte_qs = qs.values(*group_by_list).annotate(total_val = Sum('val')).values(*display_fields)
|
||||
result = list(aggreagte_qs)
|
||||
return Response(result)
|
||||
|
||||
|
|
Loading…
Reference in New Issue