feat: 出入库记录返回子表部分信息
This commit is contained in:
parent
81770e89fa
commit
52ebac68a0
|
|
@ -247,6 +247,15 @@ class MIOItemAListSerializer(CustomModelSerializer):
|
||||||
read_only_fields = EXCLUDE_FIELDS_BASE
|
read_only_fields = EXCLUDE_FIELDS_BASE
|
||||||
|
|
||||||
|
|
||||||
|
class MIOItemListSimpleSerializer(CustomModelSerializer):
|
||||||
|
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
|
||||||
|
material_name = serializers.StringRelatedField(
|
||||||
|
source='material', read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = MIOItem
|
||||||
|
fields = ["id", "mio", "material", "warehouse", "material_name", "warehouse_name", "batch", "count", "test_date", "count_notok"]
|
||||||
|
|
||||||
class MIOItemSerializer(CustomModelSerializer):
|
class MIOItemSerializer(CustomModelSerializer):
|
||||||
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
|
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
|
||||||
material_ = MaterialSerializer(source='material', read_only=True)
|
material_ = MaterialSerializer(source='material', read_only=True)
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ from apps.inm.serializers import (
|
||||||
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
||||||
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
|
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
|
||||||
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
|
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
|
||||||
MIOItemwSerializer, MioItemDetailSerializer, PackSerializer, PackMioSerializer)
|
MIOItemwSerializer, MioItemDetailSerializer, PackSerializer, PackMioSerializer, MIOItemListSimpleSerializer)
|
||||||
from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer
|
from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
from apps.inm.services import InmService
|
from apps.inm.services import InmService
|
||||||
|
|
@ -163,20 +163,39 @@ class MIOViewSet(CustomModelViewSet):
|
||||||
return mio
|
return mio
|
||||||
|
|
||||||
def add_info_for_list(self, data):
|
def add_info_for_list(self, data):
|
||||||
# 获取检验状态
|
# 1. 收集所有mio的ID
|
||||||
mio_dict = {}
|
mio_ids = [item['id'] for item in data]
|
||||||
|
|
||||||
|
# 2. 预初始化mio字典和items列表
|
||||||
|
mio_dict = {item['id']: {
|
||||||
|
**item,
|
||||||
|
'is_tested': False, # 默认值设为False
|
||||||
|
'mioitems': []
|
||||||
|
} for item in data}
|
||||||
|
|
||||||
|
# 3. 批量查询MIOItem数据
|
||||||
|
if mio_ids: # 避免空查询
|
||||||
|
mioitems = MIOItemListSimpleSerializer(
|
||||||
|
instance=MIOItem.objects.filter(
|
||||||
|
mio__id__in=mio_ids
|
||||||
|
).select_related("warehouse", "material"),
|
||||||
|
many=True
|
||||||
|
).data
|
||||||
|
|
||||||
|
# 4. 单次循环处理所有item
|
||||||
|
for item in mioitems:
|
||||||
|
mio_id = item['mio']
|
||||||
|
if mio_id in mio_dict:
|
||||||
|
mio_dict[mio_id]['mioitems'].append(item)
|
||||||
|
# 更新is_tested状态(只要有一个item有test_date就为True)
|
||||||
|
if item.get('test_date'):
|
||||||
|
mio_dict[mio_id]['is_tested'] = True
|
||||||
|
|
||||||
|
# 5. 直接返回原始data列表,避免额外转换
|
||||||
for item in data:
|
for item in data:
|
||||||
item['is_tested'] = None
|
item.update(mio_dict[item['id']])
|
||||||
mio_dict[item['id']] = item
|
|
||||||
mioitems = list(MIOItem.objects.filter(mio__id__in=mio_dict.keys()).values_list("mio__id", "test_date"))
|
return data
|
||||||
for item in mioitems:
|
|
||||||
mioId, test_date = item
|
|
||||||
is_tested = False
|
|
||||||
if test_date:
|
|
||||||
is_tested = True
|
|
||||||
mio_dict[mioId]['is_tested'] = is_tested
|
|
||||||
datax = [mio_dict[key] for key in mio_dict.keys()]
|
|
||||||
return datax
|
|
||||||
|
|
||||||
def get_serializer_class(self):
|
def get_serializer_class(self):
|
||||||
if self.action in ['create', 'update', 'partial_update']:
|
if self.action in ['create', 'update', 'partial_update']:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue