From 2cfb0d33679a1a39522f30c796853b557edeecdf Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 22 Aug 2025 11:18:51 -0700 Subject: [PATCH 1/3] 183 fix deletion of COT when Object Field pointing to it --- netbox_custom_objects/views.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/netbox_custom_objects/views.py b/netbox_custom_objects/views.py index 44fa7b9..6a67e7e 100644 --- a/netbox_custom_objects/views.py +++ b/netbox_custom_objects/views.py @@ -9,7 +9,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.views.generic import View -from extras.choices import CustomFieldUIVisibleChoices +from extras.choices import CustomFieldTypeChoices, CustomFieldUIVisibleChoices from extras.forms import JournalEntryForm from extras.models import JournalEntry from extras.tables import JournalEntryTable @@ -189,6 +189,16 @@ def _get_dependent_objects(self, obj): dependent_objects = super()._get_dependent_objects(obj) model = obj.get_model() dependent_objects[model] = list(model.objects.all()) + + # Find CustomObjectTypeFields that reference this CustomObjectType + referencing_fields = CustomObjectTypeField.objects.filter( + related_object_type=obj.content_type + ) + + # Add the CustomObjectTypeFields that reference this CustomObjectType + if referencing_fields.exists(): + dependent_objects[CustomObjectTypeField] = list(referencing_fields) + return dependent_objects From 8d1c46079e665e791f8d2a44fee1f7c0980159ee Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 22 Aug 2025 13:19:22 -0700 Subject: [PATCH 2/3] 183 delete handling --- netbox_custom_objects/models.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/netbox_custom_objects/models.py b/netbox_custom_objects/models.py index 3cc0caf..b5e922a 100644 --- a/netbox_custom_objects/models.py +++ b/netbox_custom_objects/models.py @@ -557,6 +557,11 @@ def delete(self, *args, **kwargs): ObjectChange.objects.filter(changed_object_type=object_type).delete() super().delete(*args, **kwargs) + # Delete all CustomObjectTypeFields that reference this CustomObjectType + CustomObjectTypeField.objects.filter( + related_object_type=self.content_type + ).delete() + # Temporarily disconnect the pre_delete handler to skip the ObjectType deletion # TODO: Remove this disconnect/reconnect after ObjectType has been exempted from handle_deleted_object pre_delete.disconnect(handle_deleted_object) From 9203ea4665da0e0aa9294111118aa59e5c8314fe Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 22 Aug 2025 13:49:07 -0700 Subject: [PATCH 3/3] 183 fix deletion of COT when Object Field pointing to it --- netbox_custom_objects/models.py | 10 +++++----- netbox_custom_objects/views.py | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/netbox_custom_objects/models.py b/netbox_custom_objects/models.py index b5e922a..373c78e 100644 --- a/netbox_custom_objects/models.py +++ b/netbox_custom_objects/models.py @@ -553,15 +553,15 @@ def delete(self, *args, **kwargs): self.clear_model_cache(self.id) model = self.get_model() + + # Delete all CustomObjectTypeFields that reference this CustomObjectType + for field in CustomObjectTypeField.objects.filter(related_object_type=self.content_type): + field.delete() + object_type = ObjectType.objects.get_for_model(model) ObjectChange.objects.filter(changed_object_type=object_type).delete() super().delete(*args, **kwargs) - # Delete all CustomObjectTypeFields that reference this CustomObjectType - CustomObjectTypeField.objects.filter( - related_object_type=self.content_type - ).delete() - # Temporarily disconnect the pre_delete handler to skip the ObjectType deletion # TODO: Remove this disconnect/reconnect after ObjectType has been exempted from handle_deleted_object pre_delete.disconnect(handle_deleted_object) diff --git a/netbox_custom_objects/views.py b/netbox_custom_objects/views.py index 6a67e7e..bf4069c 100644 --- a/netbox_custom_objects/views.py +++ b/netbox_custom_objects/views.py @@ -9,7 +9,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.views.generic import View -from extras.choices import CustomFieldTypeChoices, CustomFieldUIVisibleChoices +from extras.choices import CustomFieldUIVisibleChoices from extras.forms import JournalEntryForm from extras.models import JournalEntry from extras.tables import JournalEntryTable @@ -189,16 +189,16 @@ def _get_dependent_objects(self, obj): dependent_objects = super()._get_dependent_objects(obj) model = obj.get_model() dependent_objects[model] = list(model.objects.all()) - + # Find CustomObjectTypeFields that reference this CustomObjectType referencing_fields = CustomObjectTypeField.objects.filter( related_object_type=obj.content_type ) - + # Add the CustomObjectTypeFields that reference this CustomObjectType if referencing_fields.exists(): dependent_objects[CustomObjectTypeField] = list(referencing_fields) - + return dependent_objects