diff --git a/taiga/projects/admin.py b/taiga/projects/admin.py index 51bcb8d6..632f0f79 100644 --- a/taiga/projects/admin.py +++ b/taiga/projects/admin.py @@ -98,6 +98,9 @@ class ProjectAdmin(admin.ModelAdmin): memberships__project=self.obj) return super().formfield_for_manytomany(db_field, request, **kwargs) + def delete_model(self, request, obj): + obj.delete_related_content() + super().delete_model(request, obj) # User Stories common admins diff --git a/taiga/projects/api.py b/taiga/projects/api.py index e37a9f98..fb333cb0 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -253,36 +253,13 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, ModelCrudViewSet) super().pre_save(obj) def destroy(self, request, *args, **kwargs): - from taiga.events.apps import connect_events_signals, disconnect_events_signals - from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals - from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals - from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals - from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals - obj = self.get_object_or_none() self.check_permissions(request, 'destroy', obj) if obj is None: raise Http404 - disconnect_events_signals() - disconnect_all_issues_signals() - disconnect_all_tasks_signals() - disconnect_all_userstories_signals() - disconnect_memberships_signals() - - try: - obj.tasks.all().delete() - obj.user_stories.all().delete() - obj.issues.all().delete() - obj.memberships.all().delete() - obj.roles.all().delete() - finally: - connect_events_signals() - connect_all_issues_signals() - connect_all_tasks_signals() - connect_all_userstories_signals() - connect_memberships_signals() + obj.delete_related_content() self.pre_delete(obj) self.pre_conditions_on_delete(obj) diff --git a/taiga/projects/models.py b/taiga/projects/models.py index 39c18e2a..95fbdd8c 100644 --- a/taiga/projects/models.py +++ b/taiga/projects/models.py @@ -308,6 +308,31 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): notify_policy = get_notify_policy(self, user) set_notify_policy_level_to_ignore(notify_policy) + def delete_related_content(self): + from taiga.events.apps import connect_events_signals, disconnect_events_signals + from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals + from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals + from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals + from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals + + disconnect_events_signals() + disconnect_all_issues_signals() + disconnect_all_tasks_signals() + disconnect_all_userstories_signals() + disconnect_memberships_signals() + + try: + self.tasks.all().delete() + self.user_stories.all().delete() + self.issues.all().delete() + self.memberships.all().delete() + self.roles.all().delete() + finally: + connect_events_signals() + connect_all_issues_signals() + connect_all_tasks_signals() + connect_all_userstories_signals() + connect_memberships_signals() class ProjectModulesConfig(models.Model): project = models.OneToOneField("Project", null=False, blank=False,