diff --git a/apps/em/views.py b/apps/em/views.py index 439cf345..6b63144b 100644 --- a/apps/em/views.py +++ b/apps/em/views.py @@ -79,16 +79,11 @@ class EquipmentViewSet(CustomModelViewSet): from apps.enp.models import EnvData from apps.enp.serializers import EnvDataSerializer - # 子查询获取每个 equipment_id 对应的最大时间戳 - # 后面可以考虑从缓存里拿 - last_time_subquery = EnvData.objects.filter(equipment_id=OuterRef("equipment_id"), timex__gte=now_10_before, timex__lte=now).order_by("-timex").values("timex")[:1] - - # 主查询,获取每个 equipment_id 对应的完整记录 - last_envdata_qs = EnvData.objects.filter(equipment_id__in=data_ids, timex=Subquery(last_time_subquery)) - envdata = EnvDataSerializer(last_envdata_qs, many=True).data - envdata_dict = {item["equipment"]: item for item in envdata} + edata_qs = EnvData.objects.filter(equipment_id__in=data_ids, timex__gte=now_10_before, timex__lte=now).order_by("timex") + edata = EnvDataSerializer(edata_qs, many=True).data + edata_dict = {item["equipment"]: item for item in edata} for item in data: - item["envdata"] = envdata_dict.get(item["id"], {}) + item["envdata"] = edata_dict.get(item["id"], {}) return data @action(methods=["get"], detail=False, perms_map={"get": "*"})