From 3cfc4393de0b8a55941f96e9faf326742e464463 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 6 Dec 2024 15:05:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mpointvalues=20=E8=81=9A=E5=90=88?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/filters.py | 5 +++++ apps/enm/views.py | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/enm/filters.py b/apps/enm/filters.py index 6c43d888..a21eb1a0 100644 --- a/apps/enm/filters.py +++ b/apps/enm/filters.py @@ -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"]: diff --git a/apps/enm/views.py b/apps/enm/views.py index 974474ec..9cc585a8 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -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)