From e34a1a47532d2ede2cff24b8957fbdb19ef07b77 Mon Sep 17 00:00:00 2001 From: Dave Lawrence Date: Wed, 26 Aug 2026 14:07:53 +0930 Subject: [PATCH] Classification grouping - remove grouping entry before recalculating on classification delete, so empty groupings are cleaned up #1776 --- classification/signals/classification_hooks_grouping.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/classification/signals/classification_hooks_grouping.py b/classification/signals/classification_hooks_grouping.py index 4e49ffc35..999e3fea8 100644 --- a/classification/signals/classification_hooks_grouping.py +++ b/classification/signals/classification_hooks_grouping.py @@ -66,10 +66,13 @@ def condition_set(sender, classification: Classification, **kwargs): @receiver(pre_delete, sender=Classification) def deleting_classification(sender, instance: Classification, **kwargs): # pylint: disable=unused-argument # CLASSIFICATION DELETED - # when a classification is deleted, it will delete the corresponding ClassificationGroupingEntry - # so we need to mark the Allele Origin grouping (which dirty up does) + # delete the ClassificationGroupingEntry now (rather than waiting for the cascade) so the + # recalculation below doesn't count the classification being deleted - otherwise the grouping + # would be re-saved as clean while still including it, leaving a stale grouping behind if entry := ClassificationGroupingEntry.objects.filter(classification=instance).first(): - entry.dirty_up() + grouping = entry.grouping + entry.delete() + grouping.dirty_up() _instant_undirty_check()