From 98596165de94adbf5c6497df1226fea828a3bab5 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Fri, 31 Jan 2025 18:11:00 -0500 Subject: [PATCH 1/2] Factor out TileModel.set_next_sort_order() --- arches/app/models/models.py | 13 ++++++++----- arches/app/models/resource.py | 3 +-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/arches/app/models/models.py b/arches/app/models/models.py index c0faf722c8..eac8026734 100644 --- a/arches/app/models/models.py +++ b/arches/app/models/models.py @@ -1623,17 +1623,20 @@ def save(self, **kwargs): if not str(node.pk) in self.data: self.data[str(node.pk)] = None - sortorder_max = TileModel.objects.filter( - nodegroup_id=self.nodegroup_id, - resourceinstance_id=self.resourceinstance_id, - ).aggregate(Max("sortorder"))["sortorder__max"] - self.sortorder = sortorder_max + 1 if sortorder_max is not None else 0 + self.set_next_sort_order() add_to_update_fields(kwargs, "sortorder") if not self.tileid: self.tileid = uuid.uuid4() add_to_update_fields(kwargs, "tileid") super(TileModel, self).save(**kwargs) # Call the "real" save() method. + def set_next_sort_order(self): + sortorder_max = self.__class__.objects.filter( + nodegroup_id=self.nodegroup_id, + resourceinstance_id=self.resourceinstance_id, + ).aggregate(Max("sortorder"))["sortorder__max"] + self.sortorder = sortorder_max + 1 if sortorder_max is not None else 0 + def serialize(self, fields=None, exclude=["nodegroup"], **kwargs): return JSONSerializer().handle_model( self, fields=fields, exclude=exclude, **kwargs diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index f2687c050c..b3839a09ae 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -29,8 +29,7 @@ from django.utils.translation import gettext as _ from django.utils.translation import get_language from arches.app.models import models -from arches.app.models.models import EditLog -from arches.app.models.models import TileModel +from arches.app.models.models import EditLog, TileModel from arches.app.models.concept import get_preflabel_from_valueid from arches.app.models.system_settings import settings from arches.app.search.search_engine_factory import SearchEngineInstance as se From 736e40758bf291a5cb03d385928360e7f40fd7ad Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Fri, 31 Jan 2025 18:18:57 -0500 Subject: [PATCH 2/2] Resolve TODO for add_to_update_fields in Resource --- arches/app/models/resource.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index b3839a09ae..9130f81a81 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -30,6 +30,7 @@ from django.utils.translation import get_language from arches.app.models import models from arches.app.models.models import EditLog, TileModel +from arches.app.models.utils import add_to_update_fields from arches.app.models.concept import get_preflabel_from_valueid from arches.app.models.system_settings import settings from arches.app.search.search_engine_factory import SearchEngineInstance as se @@ -280,8 +281,7 @@ def save(self, **kwargs): if not self.principaluser_id and user: self.principaluser_id = user.id - # TODO: this is not updating update_fields in kwargs - # Fix when adding user argument to Resource.save(). + add_to_update_fields(kwargs, "principaluser_id") super(Resource, self).save(**kwargs)