|
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