feat: 增加mio返回is_tested

This commit is contained in:
caoqianming 2025-02-10 18:19:06 +08:00
parent b8c0a9b420
commit f8416d91b6
2 changed files with 27 additions and 3 deletions

View File

@ -1,7 +1,6 @@
from django_filters import rest_framework as filters
from apps.inm.models import MaterialBatch, MIO
from django.db.models import Q
from django.db.models import Q, Subquery, OuterRef
class MaterialBatchFilter(filters.FilterSet):
@ -20,7 +19,8 @@ class MioFilter(filters.FilterSet):
materials__type = filters.CharFilter(
method='filter_materials__type', label='物料类型')
materials__type__in = filters.CharFilter(
method='filter_materials__type__in', label="物料类型多选,")
method='filter_materials__type__in', label="物料类型多选")
# is_testd = filters.CharFilter(label="是否已检验yes/no", method="filter_is_testd")
class Meta:
model = MIO
@ -44,3 +44,11 @@ class MioFilter(filters.FilterSet):
if value:
return queryset.filter(Q(materials__type__in=value.split(',')) | Q(materials__isnull=True)).distinct()
return queryset
# def filter_is_testd(self, queryset, name, value):
# if value == "yes":
# return queryset.filter(item_mio__test_date__isnull=False).distinct() # 这里有问题,需要用到子查询影响性能
# elif value == "no":
# return queryset.filter(item_mio__test_date__isnull=True).distinct()
# else:
# return queryset

View File

@ -147,6 +147,22 @@ class MIOViewSet(CustomModelViewSet):
search_fields = ['id', 'number', 'item_mio__batch', 'item_mio__material__name', 'item_mio__material__specification', 'item_mio__material__model']
data_filter = True
def add_info_for_list(self, data):
# 获取检验状态
mio_dict = {}
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
def get_serializer_class(self):
if self.action in ['create', 'update', 'partial_update']:
type = self.request.data.get('type')