Skip to content

Commit 04988ae

Browse files
authored
Merge pull request #145 from netboxlabs/delete-custom_object_type-objectchanges
Handle deletion of all linked ObjectChanges for CustomObjects when deleting a CustomObjectType
2 parents 6d4a198 + bdad2c9 commit 04988ae

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

netbox_custom_objects/models.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from datetime import date, datetime
44

55
import django_filters
6-
from core.models import ObjectType
6+
from core.models import ObjectType, ObjectChange
77
from core.models.contenttypes import ObjectTypeManager
88
from django.apps import apps
99
from django.conf import settings
@@ -14,8 +14,10 @@
1414
from django.db import connection, models
1515
from django.db.models import Q
1616
from django.db.models.functions import Lower
17+
from django.db.models.signals import pre_delete
1718
from django.urls import reverse
1819
from django.utils.translation import gettext_lazy as _
20+
from core.signals import handle_deleted_object
1921
from extras.choices import (
2022
CustomFieldFilterLogicChoices,
2123
CustomFieldTypeChoices,
@@ -500,12 +502,17 @@ def delete(self, *args, **kwargs):
500502
self.clear_model_cache(self.id)
501503

502504
model = self.get_model()
503-
ObjectType.objects.get(
504-
app_label=APP_LABEL, model=self.get_table_model_name(self.id).lower()
505-
).delete()
505+
object_type = ObjectType.objects.get_for_model(model)
506+
ObjectChange.objects.filter(changed_object_type=object_type).delete()
506507
super().delete(*args, **kwargs)
508+
509+
# Temporarily disconnect the pre_delete handler to skip the ObjectType deletion
510+
# TODO: Remove this disconnect/reconnect after ObjectType has been exempted from handle_deleted_object
511+
pre_delete.disconnect(handle_deleted_object)
512+
object_type.delete()
507513
with connection.schema_editor() as schema_editor:
508514
schema_editor.delete_model(model)
515+
pre_delete.connect(handle_deleted_object)
509516

510517

511518
class CustomObjectTypeField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):

0 commit comments

Comments
 (0)