diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index 3dd7f9db..160f69ee 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -1,7 +1,9 @@ from django_filters import rest_framework as filters from apps.wpm.models import (SfLog, StLog, WMaterial, Mlog, Handover, Mgroup, Mlogb, Mtask, BatchSt) +from apps.mtm.models import Route from django.db.models import Q +from rest_framework.exceptions import ParseError class SfLogFilter(filters.FilterSet): class Meta: @@ -34,6 +36,7 @@ class StLogFilter(filters.FilterSet): class WMaterialFilter(filters.FilterSet): mgroupx = filters.CharFilter(label='MgroupId', method='filter_mgroupx') mtaskx = filters.CharFilter(label='MtaskId', method='filter_mtaskx') + route = filters.CharFilter(label='routeId', method='filter_route') def filter_mgroupx(self, queryset, name, value): return queryset.filter(mgroup__id=value)|queryset.filter(belong_dept=Mgroup.objects.get(id=value).belong_dept, mgroup=None) @@ -43,6 +46,13 @@ class WMaterialFilter(filters.FilterSet): if mtask.route and mtask.route.batch_bind: return WMaterial.mat_in_qs(mtask=Mtask.objects.get(id=value), qs=queryset) return queryset + + def filter_route(self, queryset, name, value): + try: + route = Route.objects.get(id=value) + except Route.DoesNotExist: + raise ParseError('生产路线不存在!') + return queryset.filter(material=route.material_in)|queryset.filter(material__in=route.materials.all()) class Meta: model = WMaterial