From 8349775af387978f026a9849ff538dcbfee08c55 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 26 Nov 2025 01:43:42 +0000 Subject: [PATCH] Refactor mixin to avoid specifying model type manually --- src/backend/InvenTree/InvenTree/api.py | 12 +++++++----- src/backend/InvenTree/build/api.py | 1 - src/backend/InvenTree/common/models.py | 2 +- src/backend/InvenTree/company/api.py | 3 --- src/backend/InvenTree/order/api.py | 3 --- src/backend/InvenTree/part/api.py | 1 - src/backend/InvenTree/users/ruleset.py | 2 +- 7 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 195972ff20..cd57fb1cc2 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -603,8 +603,6 @@ class BulkUpdateMixin(BulkOperationMixin): class ParameterListMixin: """Mixin class which supports filtering against parametric fields.""" - parameter_model_class = None - def filter_queryset(self, queryset): """Perform filtering against parametric fields.""" import common.filters @@ -616,11 +614,15 @@ class ParameterListMixin: queryset, self.request.query_params ) + serializer_class = ( + getattr(self, 'serializer_class', None) or self.get_serializer_class() + ) + + model_class = serializer_class.Meta.model + # Apply ordering based on query parameter queryset = common.filters.order_by_parameter( - queryset, - self.parameter_model_class, - self.request.query_params.get('ordering', None), + queryset, model_class, self.request.query_params.get('ordering', None) ) return queryset diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index 8805377140..5e1901f58a 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -349,7 +349,6 @@ class BuildList( - POST: Create a new Build object """ - parameter_model_class = Build output_options = BuildListOutputOptions filterset_class = BuildFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 0c3fe8878a..7ee07f7175 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -2442,7 +2442,7 @@ class ParameterTemplate( choice_set.add(choice) def validate_unique(self, exclude=None): - """Ensure that PartParameterTemplates cannot be created with the same name. + """Ensure that ParameterTemplates cannot be created with the same name. This test should be case-insensitive (which the unique caveat does not cover). """ diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index f1ca50f439..15406ca71a 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -60,7 +60,6 @@ class CompanyList(CompanyMixin, ParameterListMixin, DataExportViewMixin, ListCre - POST: Create a new Company object """ - parameter_model_class = Company filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ @@ -201,7 +200,6 @@ class ManufacturerPartList( - POST: Create a new ManufacturerPart object """ - parameter_model_class = ManufacturerPart filterset_class = ManufacturerPartFilter filter_backends = SEARCH_ORDER_FILTER output_options = ManufacturerOutputOptions @@ -352,7 +350,6 @@ class SupplierPartList( - POST: Create a new SupplierPart object """ - parameter_model_class = SupplierPart filterset_class = SupplierPartFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS output_options = SupplierPartOutputOptions diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 0609ab365a..ee2fa7a4c9 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -392,7 +392,6 @@ class PurchaseOrderList( - POST: Create a new PurchaseOrder object """ - parameter_model_class = models.PurchaseOrder filterset_class = PurchaseOrderFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS output_options = PurchaseOrderOutputOptions @@ -863,7 +862,6 @@ class SalesOrderList( - POST: Create a new SalesOrder """ - parameter_model_class = models.SalesOrder filterset_class = SalesOrderFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS output_options = SalesOrderOutputOptions @@ -1537,7 +1535,6 @@ class ReturnOrderList( ): """API endpoint for accessing a list of ReturnOrder objects.""" - parameter_model_class = models.ReturnOrder filterset_class = ReturnOrderFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index b161e0114c..57fcc7cb85 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -1076,7 +1076,6 @@ class PartList( ): """API endpoint for accessing a list of Part objects, or creating a new Part instance.""" - parameter_model_class = Part output_options = PartOutputOptions filterset_class = PartFilter is_create = True diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index 3995dc2383..7beb4f1eec 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -40,7 +40,7 @@ RULESET_NAMES = [choice[0] for choice in RULESET_CHOICES] # Permission types available for each ruleset. RULESET_PERMISSIONS = ['view', 'add', 'change', 'delete'] -RULESET_CHANGE_INHERIT = [('part', 'partparameter'), ('part', 'bomitem')] +RULESET_CHANGE_INHERIT = [('part', 'bomitem')] def get_ruleset_models() -> dict: