diff --git a/rdmo/projects/handlers/project_save_tasks.py b/rdmo/projects/handlers/project_save_tasks.py index 99acb76a6a..cfd48eb4c0 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 38c3040fe6..2888740f72 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))