From 829a9d8311307aed092c554ae128773d4c9d2c75 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 21 Sep 2022 23:31:24 +1000 Subject: [PATCH] Parameter ordering fix (#3704) * Hard-code URL fforr loadPartParameterTable function * Improve API efficiency for including parameter data in Part query * Fix loading of part parameter data into table --- InvenTree/part/api.py | 14 ++++++++++++++ InvenTree/part/serializers.py | 13 +++++++++++++ InvenTree/part/templates/part/detail.html | 1 - InvenTree/templates/js/translated/part.js | 11 +++++------ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 42c1b84b59..a0177380f8 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1605,6 +1605,20 @@ class PartParameterList(ListCreateAPI): queryset = PartParameter.objects.all() serializer_class = part_serializers.PartParameterSerializer + def get_serializer(self, *args, **kwargs): + """Return the serializer instance for this API endpoint. + + If requested, extra detail fields are annotated to the queryset: + - template_detail + """ + + try: + kwargs['template_detail'] = str2bool(self.request.GET.get('template_detail', True)) + except AttributeError: + pass + + return self.serializer_class(*args, **kwargs) + filter_backends = [ DjangoFilterBackend ] diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index a757f566b6..14140b69d7 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -247,6 +247,19 @@ class PartParameterTemplateSerializer(InvenTreeModelSerializer): class PartParameterSerializer(InvenTreeModelSerializer): """JSON serializers for the PartParameter model.""" + def __init__(self, *args, **kwargs): + """Custom initialization method for the serializer. + + Allows us to optionally include or exclude particular information + """ + + template_detail = kwargs.pop('template_detail', False) + + super().__init__(*args, **kwargs) + + if not template_detail: + self.fields.pop('template_detail') + template_detail = PartParameterTemplateSerializer(source='template', many=False, read_only=True) class Meta: diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 86ad10f35e..b32ca706f3 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -813,7 +813,6 @@ onPanelLoad("part-parameters", function() { loadPartParameterTable( '#parameter-table', - '{% url "api-part-parameter-list" %}', { params: { part: {{ part.pk }}, diff --git a/InvenTree/templates/js/translated/part.js b/InvenTree/templates/js/translated/part.js index b3c291b98a..fbc07bdd09 100644 --- a/InvenTree/templates/js/translated/part.js +++ b/InvenTree/templates/js/translated/part.js @@ -803,7 +803,7 @@ function loadSimplePartTable(table, url, options={}) { } -function loadPartParameterTable(table, url, options) { +function loadPartParameterTable(table, options) { var params = options.params || {}; @@ -819,7 +819,7 @@ function loadPartParameterTable(table, url, options) { setupFilterList('part-parameters', $(table), filterTarget); $(table).inventreeTable({ - url: url, + url: '{% url "api-part-parameter-list" %}', original: params, queryParams: filters, name: 'partparameters', @@ -1292,13 +1292,12 @@ function loadParametricPartTable(table, options={}) { }, columns: columns, showColumns: true, - // filterControl: true, sidePagination: 'server', idField: 'pk', uniqueId: 'pk', - onLoadSuccess: function() { + onLoadSuccess: function(response) { - var data = $(table).bootstrapTable('getData'); + var data = response.results; for (var idx = 0; idx < data.length; idx++) { var row = data[idx]; @@ -1309,7 +1308,7 @@ function loadParametricPartTable(table, options={}) { row[`parameter_${parameter.template}`] = parameter.data; }); - $(table).bootstrapTable('updateRow', pk, row); + $(table).bootstrapTable('updateByUniqueId', pk, row); } } });