From 825e4b4cd883b9e4ed875d7d740e902cceea0fad Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 29 Jun 2022 11:47:17 +1000 Subject: [PATCH] Part API Filter Fix (#3271) * Fix API filter 'in_bom_for' - get_parts_in_bom() returns a list, not a queryset - Thus, we have to enumerate the ID values, rather than filtering by queryset * Add unit test for part API filter --- InvenTree/part/api.py | 3 ++- InvenTree/part/test_api.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index ceb9b60c8c..2959206daa 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -866,7 +866,8 @@ class PartFilter(rest_filters.FilterSet): def filter_in_bom(self, queryset, name, part): """Limit queryset to parts in the BOM for the specified part""" - queryset = queryset.filter(id__in=part.get_parts_in_bom()) + bom_parts = part.get_parts_in_bom() + queryset = queryset.filter(id__in=[p.pk for p in bom_parts]) return queryset is_template = rest_filters.BooleanFilter() diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index b39f4f2e19..96057bc9c7 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -400,6 +400,21 @@ class PartAPITest(InvenTreeAPITestCase): for part in response.data: self.assertEqual(part['category'], 2) + def test_filter_by_in_bom(self): + """Test that we can filter part list by the 'in_bom_for' parameter""" + + url = reverse('api-part-list') + + response = self.get( + url, + { + 'in_bom_for': 100, + }, + expected_code=200, + ) + + self.assertEqual(len(response.data), 4) + def test_filter_by_related(self): """Test that we can filter by the 'related' status""" url = reverse('api-part-list')