perf: 优化mlog list速度2
This commit is contained in:
parent
6653befcdb
commit
4e6aa547b5
|
@ -307,4 +307,13 @@ def build_tree_from_list(data, parent_field="parent"):
|
||||||
else:
|
else:
|
||||||
tree.append(item)
|
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
|
|
@ -211,7 +211,7 @@ class MlogbSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Mlogb
|
model = Mlogb
|
||||||
fields = ['id', 'material_out', 'count_ok',
|
fields = ['id', 'material_out', 'count_ok',
|
||||||
'material_out_', 'material_out_name']
|
'material_out_', 'material_out_name', "mlog"]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'material_out': {'required': True, 'allow_null': False}}
|
'material_out': {'required': True, 'allow_null': False}}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ from apps.wpmw.models import Wpr
|
||||||
from apps.qm.models import QctMat, Ftest
|
from apps.qm.models import QctMat, Ftest
|
||||||
from apps.enm.models import EnStat
|
from apps.enm.models import EnStat
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from apps.utils.tools import convert_ordereddict
|
||||||
|
|
||||||
|
|
||||||
# Create your views here.
|
# 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_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
|
mlogb_data = MlogbSerializer(instance=mlogb_qs, many=True).data
|
||||||
for item in mlogb_data:
|
for item in mlogb_data:
|
||||||
item_dict = dict(item)
|
item_dict = convert_ordereddict(item)
|
||||||
mlog_id = item_dict.get("mlog")
|
if item_dict["mlog"] in data_dict:
|
||||||
if mlog_id in data_dict:
|
data_dict[item_dict["mlog"]]["mlogb_full"].append(item_dict)
|
||||||
data_dict[mlog_id]["mlogb_full"].append(item_dict)
|
if item.get("material_out", None):
|
||||||
if item.get("material_out"):
|
data_dict[item_dict["mlog"]]["mlogb"].append(item_dict)
|
||||||
data_dict[mlog_id]["mlogb"].append(item_dict)
|
|
||||||
return list(data_dict.values())
|
return list(data_dict.values())
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
|
Loading…
Reference in New Issue