diff --git a/app/admin.py b/app/admin.py index 80ae861..5df424f 100644 --- a/app/admin.py +++ b/app/admin.py @@ -9,6 +9,7 @@ from django.http import HttpResponse import csv from django import forms from django.contrib.admin.widgets import AutocompleteSelect +from django.contrib import messages # import messages class autocomplete_fields_form(forms.ModelForm): @@ -124,6 +125,81 @@ class PersonAdmin(admin.ModelAdmin): 'country', 'organisation_english', 'organisation_2', 'organisation_3', 'acronym') return queryset + def get_actions(self, request): + actions = super().get_actions(request) + if 'delete_selected' in actions: + del actions['delete_selected'] + return actions + + def delete_model(self, request, obj): + self.delete_person(request, obj) + return super(PersonAdmin, self).delete_model(request, obj) + + def delete_person(self, request, obj): + taxa_people = TaxaPeople.objects.filter(person=obj.id) + for i in taxa_people: + i.delete() + ranges_people = RangesPeople.objects.filter(person=obj.id) + for i in ranges_people: + i.delete() + resources_people = ResourcesPeople.objects.filter(person=obj.id) + for i in resources_people: + i.delete() + scales_people = ScalesPeople.objects.filter(person=obj.id) + for i in scales_people: + i.delete() + people_function = PeopleFunction.objects.filter(person=obj.id) + for i in people_function: + i.delete() + people_range = PeopleRange.objects.filter(person=obj.id) + for i in people_range: + i.delete() + people_resources = PeopleResource.objects.filter(person=obj.id) + for i in people_resources: + i.delete() + fields_people = FieldsPeople.objects.filter(person=obj.id) + for i in fields_people: + i.delete() + methods_people = MethodsPeople.objects.filter(person=obj.id) + for i in methods_people: + i.delete() + + def delete_persons(self, request, obj): + for o in obj.all(): + taxa_people = TaxaPeople.objects.filter(person=o.id) + for i in taxa_people: + i.delete() + ranges_people = RangesPeople.objects.filter(person=o.id) + for i in ranges_people: + i.delete() + resources_people = ResourcesPeople.objects.filter(person=o.id) + for i in resources_people: + i.delete() + scales_people = ScalesPeople.objects.filter(person=o.id) + for i in scales_people: + i.delete() + people_function = PeopleFunction.objects.filter(person=o.id) + for i in people_function: + i.delete() + people_range = PeopleRange.objects.filter(person=o.id) + for i in people_range: + i.delete() + people_resources = PeopleResource.objects.filter(person=o.id) + for i in people_resources: + i.delete() + fields_people = FieldsPeople.objects.filter(person=o.id) + for i in fields_people: + i.delete() + methods_people = MethodsPeople.objects.filter(person=o.id) + for i in methods_people: + i.delete() + o.delete() + messages.success(request, "Successfully deleted") + + delete_persons.short_description = 'Delete Person & Related Fields' + + actions = [download_csv, delete_persons] + class ResourceKeywordInline(admin.TabularInline): autocomplete_fields = ['keyword'] @@ -192,7 +268,26 @@ class ResourceAdmin(admin.ModelAdmin): del actions['delete_selected'] return actions + def delete_model(self, request, obj): + self.delete_resource(request, obj) + return super(ResourceAdmin, self).delete_model(request, obj) + def delete_resource(self, request, obj): + resource_keyword = ResourceKeyword.objects.filter(resource=obj.id) + for i in resource_keyword: + i.delete() + resource_range = ResourceRange.objects.filter(resource_title=obj.id) + for i in resource_range: + i.delete() + resource_people = ResourcesPeople.objects.filter(resource=obj.id) + for i in resource_people: + i.delete() + resource_people_resource = PeopleResource.objects.filter( + resource=obj.id) + for i in resource_people_resource: + i.delete() + + def delete_resources(self, request, obj): for o in obj.all(): resource_keyword = ResourceKeyword.objects.filter(resource=o.id) for i in resource_keyword: @@ -208,9 +303,10 @@ class ResourceAdmin(admin.ModelAdmin): for i in resource_people_resource: i.delete() o.delete() - delete_resource.short_description = 'Delete Resource & Related Fields' + messages.success(request, "Successfully deleted") + delete_resources.short_description = 'Delete Resource & Related Fields' - actions = [download_csv, delete_resource] + actions = [download_csv, delete_resources] class RangeNameTranslationInline(admin.TabularInline):