|
3 | 3 | from datetime import date, datetime |
4 | 4 |
|
5 | 5 | import django_filters |
6 | | -from core.models import ObjectType |
| 6 | +from core.models import ObjectType, ObjectChange |
7 | 7 | from core.models.contenttypes import ObjectTypeManager |
8 | 8 | from django.apps import apps |
9 | 9 | from django.conf import settings |
|
14 | 14 | from django.db import connection, models |
15 | 15 | from django.db.models import Q |
16 | 16 | from django.db.models.functions import Lower |
| 17 | +from django.db.models.signals import pre_delete |
17 | 18 | from django.urls import reverse |
18 | 19 | from django.utils.translation import gettext_lazy as _ |
| 20 | +from core.signals import handle_deleted_object |
19 | 21 | from extras.choices import ( |
20 | 22 | CustomFieldFilterLogicChoices, |
21 | 23 | CustomFieldTypeChoices, |
@@ -500,12 +502,17 @@ def delete(self, *args, **kwargs): |
500 | 502 | self.clear_model_cache(self.id) |
501 | 503 |
|
502 | 504 | 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() |
506 | 507 | 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() |
507 | 513 | with connection.schema_editor() as schema_editor: |
508 | 514 | schema_editor.delete_model(model) |
| 515 | + pre_delete.connect(handle_deleted_object) |
509 | 516 |
|
510 | 517 |
|
511 | 518 | class CustomObjectTypeField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): |
|
0 commit comments