From 62d01cdbab41950a8554cfa309d8241996745764 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 19 Mar 2022 21:31:28 +1100 Subject: [PATCH] Adds filtering options to PartParameterTemplate endpoint - Allows filtering by part - Allows filtering by category --- InvenTree/part/api.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index f542e36c68..ac716b12bd 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1405,6 +1405,44 @@ class PartParameterTemplateList(generics.ListCreateAPIView): 'name', ] + def filter_queryset(self, queryset): + """ + Custom filtering for the PartParameterTemplate API + """ + + queryset = super().filter_queryset(queryset) + + params = self.request.query_params + + # Filtering against a "Part" - return only parameter templates which are referenced by a part + part = params.get('part', None) + + if part is not None: + + try: + part = Part.objects.get(pk=part) + parameters = PartParameter.objects.filter(part=part) + template_ids = parameters.values_list('template').distinct() + queryset = queryset.filter(pk__in=[el[0] for el in template_ids]) + except (ValueError, Part.DoesNotExist): + pass + + # Filtering against a "PartCategory" - return only parameter templates which are referenced by parts in this category + category = params.get('category', None) + + if category is not None: + + try: + category = PartCategory.objects.get(pk=category) + cats = category.get_descendants(include_self=True) + parameters = PartParameter.objects.filter(part__category__in=cats) + template_ids = parameters.values_list('template').distinct() + queryset = queryset.filter(pk__in=[el[0] for el in template_ids]) + except (ValueError, PartCategory.DoesNotExist): + pass + + return queryset + class PartParameterList(generics.ListCreateAPIView): """ API endpoint for accessing a list of PartParameter objects