diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index 38f16c4b..6044c34a 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -42,7 +42,7 @@ class WMaterialFilter(filters.FilterSet): material__process__exclude = filters.CharFilter(field_name="material__process", lookup_expr="exact", exclude=True) 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)|queryset.filter(mgroup=None, belong_dept=None) + return WMaterial.ava_qs(mgroup=Mgroup.objects.get(id=value), qs=queryset) def filter_tag(self, queryset, name, value): mgroupId = self.data.get("mgroup", None) diff --git a/apps/wpm/models.py b/apps/wpm/models.py index f6b9349a..90aa4f44 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -130,6 +130,15 @@ class WMaterial(CommonBDModel): def count_handovering(self): return Handoverb.objects.filter(wm=self, handover__submit_time__isnull=True).aggregate(count=Sum('count'))['count'] or 0 + @classmethod + def ava_qs(cls, mgroup:Mgroup, qs=None): + """ + 可用的queryset + """ + if qs is None: + qs = cls.objects + return qs.filter(Q(mgroup=mgroup)|Q(mgroup=None, belong_dept=mgroup.belong_dept)|Q(mgroup=None, belong_dept=None)) + @classmethod def mat_in_qs(cls, mtask: Mtask, qs=None): """ @@ -137,7 +146,7 @@ class WMaterial(CommonBDModel): """ if qs is None: qs = cls.objects - return qs.filter( + return WMaterial.ava_qs(mgroup=mtask.mgroup, qs=qs).filter( mgroup=mtask.mgroup, material=mtask.material_in, batch__in=Subquery(