Merge pull request #559 from taigaio/issue-3282-error-500-when-deleting-project-from-admin

Issue #3283: Taiga 1.8.0: HTTP error 500 while trying to delete proje…
remotes/origin/logger
David Barragán Merino 2016-01-04 14:43:36 +01:00
commit 5b83e8c450
3 changed files with 29 additions and 24 deletions

View File

@ -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

View File

@ -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)

View File

@ -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,