From ca409928d2425f191e66585d2b5f51b0529eda61 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Wed, 22 Jan 2025 12:15:23 +0100 Subject: [PATCH] fix(project,handlers): ignore signals at project create Signed-off-by: David Wallace --- rdmo/projects/handlers/project_save_tasks.py | 7 ++++++- rdmo/projects/handlers/project_save_views.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rdmo/projects/handlers/project_save_tasks.py b/rdmo/projects/handlers/project_save_tasks.py index 99acb76a6..cfd48eb4c 100644 --- a/rdmo/projects/handlers/project_save_tasks.py +++ b/rdmo/projects/handlers/project_save_tasks.py @@ -8,7 +8,10 @@ @receiver(pre_save, sender=Project) def pre_save_project_sync_tasks_from_catalog(sender, instance, raw, update_fields, **kwargs): - if raw or (update_fields and 'catalog' not in update_fields): + if (raw or + instance.id is None or + (update_fields and 'catalog' not in update_fields) + ): return # Fetch the original catalog from the database @@ -22,6 +25,8 @@ def pre_save_project_sync_tasks_from_catalog(sender, instance, raw, update_field @receiver(post_save, sender=Project) def post_save_project_sync_tasks_from_catalog(sender, instance, created, raw, **kwargs): + if not hasattr(instance, DEFERRED_SYNC_TASKS_KEY): + return if getattr(instance, DEFERRED_SYNC_TASKS_KEY, None) or (created and not raw): # For existing projects with catalog changes, use deferred views instance.views.set(Task.objects.filter_available_tasks_for_project(instance)) diff --git a/rdmo/projects/handlers/project_save_views.py b/rdmo/projects/handlers/project_save_views.py index 38c3040fe..2888740f7 100644 --- a/rdmo/projects/handlers/project_save_views.py +++ b/rdmo/projects/handlers/project_save_views.py @@ -8,7 +8,10 @@ @receiver(pre_save, sender=Project) def pre_save_project_sync_views_from_catalog(sender, instance, raw, update_fields, **kwargs): - if raw or (update_fields and 'catalog' not in update_fields): + if (raw or + instance.id is None or + (update_fields and 'catalog' not in update_fields) + ): return # Fetch the original catalog from the database @@ -22,6 +25,8 @@ def pre_save_project_sync_views_from_catalog(sender, instance, raw, update_field @receiver(post_save, sender=Project) def post_save_project_sync_views_from_catalog(sender, instance, created, raw, update_fields, **kwargs): + if not hasattr(instance, DEFERRED_SYNC_VIEWS_KEY): + return if getattr(instance, DEFERRED_SYNC_VIEWS_KEY, None) or (created and not raw): # For existing projects with catalog changes, use deferred views instance.views.set(View.objects.filter_available_views_for_project(instance))