perf: 优化mlog list速度2

This commit is contained in:
caoqianming 2025-02-25 17:30:40 +08:00
parent 6653befcdb
commit 4e6aa547b5
3 changed files with 17 additions and 8 deletions

View File

@ -307,4 +307,13 @@ def build_tree_from_list(data, parent_field="parent"):
else:
tree.append(item)
return tree
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

View File

@ -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}}

View File

@ -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