diff --git a/apps/inm/filters.py b/apps/inm/filters.py index e4fc930c..9a83211b 100644 --- a/apps/inm/filters.py +++ b/apps/inm/filters.py @@ -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 diff --git a/apps/inm/views.py b/apps/inm/views.py index 6f8500dc..625558fa 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -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')