From 092c43b49ad1abd2bb6043a21fb8274d3bd4be87 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 31 Mar 2026 07:13:12 +1100 Subject: [PATCH] Update "date" field for StockItemTestResult (#11586) * Update "date" field for StockItemTestResult - Allow editing of date (via admin) * Mark 'date' and 'user' as read-only unless importing * Revert API field name * Fix default value * Fix migration --------- Co-authored-by: Matthias Mair --- src/backend/InvenTree/importer/mixins.py | 4 ++-- .../0119_alter_stockitemtestresult_date.py | 22 +++++++++++++++++++ src/backend/InvenTree/stock/models.py | 4 +++- src/backend/InvenTree/stock/serializers.py | 11 +++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/backend/InvenTree/stock/migrations/0119_alter_stockitemtestresult_date.py diff --git a/src/backend/InvenTree/importer/mixins.py b/src/backend/InvenTree/importer/mixins.py index 1a36982ed6..969f82afa2 100644 --- a/src/backend/InvenTree/importer/mixins.py +++ b/src/backend/InvenTree/importer/mixins.py @@ -24,11 +24,11 @@ class DataImportSerializerMixin: Determine if the serializer is being used for data import, and if so, adjust the serializer fields accordingly. """ - importing = kwargs.pop('importing', False) + self._is_importing = kwargs.pop('importing', False) super().__init__(*args, **kwargs) - if importing: + if self._is_importing: # Exclude any fields which are not able to be imported importable_field_names = list(self.get_importable_fields().keys()) field_names = list(self.fields.keys()) diff --git a/src/backend/InvenTree/stock/migrations/0119_alter_stockitemtestresult_date.py b/src/backend/InvenTree/stock/migrations/0119_alter_stockitemtestresult_date.py new file mode 100644 index 0000000000..b0389ca2ec --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0119_alter_stockitemtestresult_date.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.12 on 2026-03-21 08:00 + +import InvenTree.helpers +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("stock", "0118_auto_20260205_1218"), + ] + + operations = [ + migrations.AlterField( + model_name="stockitemtestresult", + name="date", + field=models.DateTimeField( + default=InvenTree.helpers.current_time, + verbose_name="Date" + ), + ), + ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index a3406adb41..d941919706 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -3101,4 +3101,6 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): help_text=_('The timestamp of the test finish'), ) - date = models.DateTimeField(auto_now_add=True, editable=False) + date = models.DateTimeField( + default=InvenTree.helpers.current_time, verbose_name=_('Date') + ) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index ded3441338..5aa339e340 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -220,7 +220,16 @@ class StockItemTestResultSerializer( 'template', 'template_detail', ] - read_only_fields = ['pk', 'user', 'date'] + read_only_fields = ['pk'] + + def __init__(self, *args, **kwargs): + """Handle custom initialization for the serializer.""" + super().__init__(*args, **kwargs) + + if not self._is_importing: + # Unless we are importing data, mark the 'user' and 'date' fields as read-only + self.fields['user'].read_only = True + self.fields['date'].read_only = True user_detail = enable_filter( UserSerializer(source='user', read_only=True, allow_null=True),