From 4e6aa547b5ddd951ad78dbdf9719aa6c68086772 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 25 Feb 2025 17:30:40 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96mlog=20list=E9=80=9F?= =?UTF-8?q?=E5=BA=A62?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/tools.py | 11 ++++++++++- apps/wpm/serializers.py | 2 +- apps/wpm/views.py | 12 ++++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/utils/tools.py b/apps/utils/tools.py index c19ae87e..b23e977f 100755 --- a/apps/utils/tools.py +++ b/apps/utils/tools.py @@ -307,4 +307,13 @@ def build_tree_from_list(data, parent_field="parent"): else: tree.append(item) - return tree \ No newline at end of file + return tree + +def convert_ordereddict(item): + """递归地将 OrderedDict 转换为普通字典""" + if isinstance(item, list): + return [convert_ordereddict(i) for i in item] # 递归处理列表中的每个元素 + elif isinstance(item, dict): + # 如果是 OrderedDict 或普通字典,遍历所有键值对进行转换 + return {key: convert_ordereddict(value) for key, value in item.items()} + return item \ No newline at end of file diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index b23330ad..b2c725db 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -211,7 +211,7 @@ class MlogbSerializer(CustomModelSerializer): class Meta: model = Mlogb fields = ['id', 'material_out', 'count_ok', - 'material_out_', 'material_out_name'] + 'material_out_', 'material_out_name', "mlog"] extra_kwargs = { 'material_out': {'required': True, 'allow_null': False}} diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 0369e39c..6f2fb5b1 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -33,6 +33,7 @@ from apps.wpmw.models import Wpr from apps.qm.models import QctMat, Ftest from apps.enm.models import EnStat from django.db.models import Q +from apps.utils.tools import convert_ordereddict # Create your views here. @@ -184,12 +185,11 @@ class MlogViewSet(CustomModelViewSet): mlogb_qs = Mlogb.objects.filter(mlog__id__in=data_dict.keys()).select_related("material_in", "material_out").order_by("create_time") mlogb_data = MlogbSerializer(instance=mlogb_qs, many=True).data for item in mlogb_data: - item_dict = dict(item) - mlog_id = item_dict.get("mlog") - if mlog_id in data_dict: - data_dict[mlog_id]["mlogb_full"].append(item_dict) - if item.get("material_out"): - data_dict[mlog_id]["mlogb"].append(item_dict) + item_dict = convert_ordereddict(item) + if item_dict["mlog"] in data_dict: + data_dict[item_dict["mlog"]]["mlogb_full"].append(item_dict) + if item.get("material_out", None): + data_dict[item_dict["mlog"]]["mlogb"].append(item_dict) return list(data_dict.values()) @transaction.atomic