From 24b554a8d24c6870c3f1386644e97d921a068c68 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 24 Jun 2023 01:04:11 +1000 Subject: [PATCH] PartParameter API improvements (#5094) * PartParameter: Include template_detail by default * PartParameter API updates - Allow sorting by template name - Refactor with mixin class * Bug fixes * Bump API version --- InvenTree/InvenTree/api_version.py | 5 ++++- InvenTree/part/api.py | 35 +++++++++++++++++++----------- InvenTree/part/serializers.py | 2 +- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 92ee99fdde..1114f982d3 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -2,11 +2,14 @@ # InvenTree API version -INVENTREE_API_VERSION = 126 +INVENTREE_API_VERSION = 127 """ Increment this API version number whenever there is a significant change to the API that any clients need to know about +v127 -> 2023-06-24 : https://github.com/inventree/InvenTree/pull/5094 + - Enhancements for the PartParameter API endpoints + v126 -> 2023-06-19 : https://github.com/inventree/InvenTree/pull/5075 - Adds API endpoint for setting the "category" for multiple parts simultaneously diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index b225fb3c8e..20878fae13 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1461,13 +1461,8 @@ class PartParameterTemplateDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.PartParameterTemplateSerializer -class PartParameterList(ListCreateAPI): - """API endpoint for accessing a list of PartParameter objects. - - - GET: Return list of PartParameter objects - - POST: Create a new PartParameter object - """ - +class PartParameterAPIMixin: + """Mixin class for PartParameter API endpoints.""" queryset = PartParameter.objects.all() serializer_class = part_serializers.PartParameterSerializer @@ -1485,21 +1480,35 @@ class PartParameterList(ListCreateAPI): return self.serializer_class(*args, **kwargs) - filter_backends = [ - DjangoFilterBackend + +class PartParameterList(PartParameterAPIMixin, ListCreateAPI): + """API endpoint for accessing a list of PartParameter objects. + + - GET: Return list of PartParameter objects + - POST: Create a new PartParameter object + """ + + filter_backends = SEARCH_ORDER_FILTER_ALIAS + + ordering_fields = [ + 'name', + 'data', ] + ordering_field_aliases = { + 'name': 'template__name', + 'data': ['data_numeric', 'data'], + } + filterset_fields = [ 'part', 'template', ] -class PartParameterDetail(RetrieveUpdateDestroyAPI): +class PartParameterDetail(PartParameterAPIMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a single PartParameter object.""" - - queryset = PartParameter.objects.all() - serializer_class = part_serializers.PartParameterSerializer + pass class PartStocktakeFilter(rest_filters.FilterSet): diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index e43cf46247..ef4f181021 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -242,7 +242,7 @@ class PartParameterSerializer(InvenTree.serializers.InvenTreeModelSerializer): Allows us to optionally include or exclude particular information """ - template_detail = kwargs.pop('template_detail', False) + template_detail = kwargs.pop('template_detail', True) super().__init__(*args, **kwargs)