diff --git a/apps/inm/filters.py b/apps/inm/filters.py index 097b76e5..9b729afc 100644 --- a/apps/inm/filters.py +++ b/apps/inm/filters.py @@ -1,5 +1,5 @@ from django_filters import rest_framework as filters -from apps.inm.models import MaterialBatch +from apps.inm.models import MaterialBatch, MIO class MaterialBatchFilter(filters.FilterSet): @@ -13,3 +13,29 @@ class MaterialBatchFilter(filters.FilterSet): "material__process": ["exact", "in"], "count": ["exact", "gte", "lte"] } + + +class MioFilter(filters.FilterSet): + materials__type = filters.CharFilter( + method='filter_materials__type', label='物料类型') + materials__type__in = filters.CharFilter( + method='filter_materials__type__in', label="物料类型多选,") + + class Meta: + model = MIO + fields = { + 'state': ["exact", "in"], + "type": ["exact", "in"], + "pu_order": ["exact"], + "order": ["exact"] + } + + def filter_materials__type(self, queryset, name, value): + if value: + return queryset.filter(materials__type=value).distinct() + return queryset + + def filter_materials__type__in(self, queryset, name, value): + if value: + return queryset.filter(materials__type__in=value.split(',')).distinct() + return queryset diff --git a/apps/inm/views.py b/apps/inm/views.py index 6050d62f..89c96a3c 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -16,7 +16,7 @@ from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin from apps.utils.permission import has_perm -from .filters import MaterialBatchFilter +from .filters import MaterialBatchFilter, MioFilter # Create your views here. @@ -124,14 +124,7 @@ class MIOViewSet(CustomModelViewSet): 'submit_user', 'supplier', 'order', 'customer', 'pu_order'] serializer_class = MIOListSerializer retrieve_serializer_class = MIODetailSerializer - filterset_fields = { - 'state': ["exact", "in"], - "type": ["exact", "in"], - "pu_order": ["exact"], - "order": ["exact"], - "materials": ["exact"], - "materials__type": ["exact", "in"] - } + filterset_class = MioFilter search_fields = ['number'] data_filter = True