From a8722724e10a74df86aea877d499d44081b27064 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 22 Sep 2025 11:31:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20route=E5=A2=9E=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E4=BB=A5=E6=94=AF=E6=8C=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=90=8E=E7=BB=AD=E5=B7=A5=E6=AE=B5=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/filters.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/mtm/filters.py b/apps/mtm/filters.py index 52d45059..df1a9e9e 100644 --- a/apps/mtm/filters.py +++ b/apps/mtm/filters.py @@ -1,6 +1,7 @@ from django_filters import rest_framework as filters -from apps.mtm.models import Goal, Material, Route +from apps.mtm.models import Goal, Material, Route, RoutePack from django.db.models.expressions import F +from rest_framework.exceptions import ParseError class MaterialFilter(filters.FilterSet): @@ -45,6 +46,8 @@ class GoalFilter(filters.FilterSet): class RouteFilter(filters.FilterSet): + nprocess_name = filters.CharFilter(method='filter_nprocess_name', label="nprocess_name") + material_in_has = filters.CharFilter(method='filter_material_in_has', label="material_in_has ID") class Meta: model = Route fields = { @@ -61,3 +64,15 @@ class RouteFilter(filters.FilterSet): "mgroup__belong_dept__name": ["exact", "contains"], "from_route": ["exact", "isnull"], } + + def filter_nprocess_name(self, queryset, name, value): + return queryset + + + def filter_material_in_has(self, queryset, name, value): + nprocess_name = self.data.get('nprocess_name', None) + if nprocess_name: + routepack_qs = queryset.filter(material_in__id=value, routepack__isnull=False, routepack__state=RoutePack.RP_S_CONFIRM).values_list('routepack', flat=True) + qs = queryset.filter(routepack__in=routepack_qs, process__name=nprocess_name) + return qs + raise ParseError("nprocess_name is required") \ No newline at end of file