feat: 出入库记录返回子表部分信息
This commit is contained in:
parent
81770e89fa
commit
52ebac68a0
|
|
@ -247,6 +247,15 @@ class MIOItemAListSerializer(CustomModelSerializer):
|
|||
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):
|
||||
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
|
||||
material_ = MaterialSerializer(source='material', read_only=True)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ from apps.inm.serializers import (
|
|||
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
||||
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
|
||||
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
|
||||
MIOItemwSerializer, MioItemDetailSerializer, PackSerializer, PackMioSerializer)
|
||||
MIOItemwSerializer, MioItemDetailSerializer, PackSerializer, PackMioSerializer, MIOItemListSimpleSerializer)
|
||||
from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer
|
||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||
from apps.inm.services import InmService
|
||||
|
|
@ -163,20 +163,39 @@ class MIOViewSet(CustomModelViewSet):
|
|||
return mio
|
||||
|
||||
def add_info_for_list(self, data):
|
||||
# 获取检验状态
|
||||
mio_dict = {}
|
||||
# 1. 收集所有mio的ID
|
||||
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:
|
||||
item['is_tested'] = None
|
||||
mio_dict[item['id']] = item
|
||||
mioitems = list(MIOItem.objects.filter(mio__id__in=mio_dict.keys()).values_list("mio__id", "test_date"))
|
||||
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
|
||||
item.update(mio_dict[item['id']])
|
||||
|
||||
return data
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['create', 'update', 'partial_update']:
|
||||
|
|
|
|||
Loading…
Reference in New Issue