Срабатывает ли сигнал от родительской модели при изменении дочерней модели?
Я разработал пользовательскую библиотеку для синхронизации некоторых моделей. Итак, есть родительская модель, называемая SyncModel в этой библиотеке, которая имеет несколько дочерних моделей в моем приложении Django.
В этой библиотеке есть функция приемника, которая активируется, когда кто-то делает удаление. Вот эта функция:
@receiver(post_delete)
def on_object_deletion(sender, instance, **kwargs):
"""Upload deleted object to cloud if it is part of synced model"""
deletion_time = datetime.datetime.now()
# Retrieve the metadata (app and model name) for the model
contenttype = ContentType.objects.get_for_model(model=instance)
# Skip unnecessary database lookup (never syncs its own models)
if contenttype.app_label == "lakehouse_sync":
return
syncmodel = SyncModel.try_retrieve_model(contenttype.app_label, contenttype.model)
if not syncmodel:
return
# Raise exception if the instance is not BaseSyncModel.
# Should be caught during clean() though.
if not isinstance(instance, BaseSyncModel):
raise Exception("Cannot sync a model that does not inherit BaseSyncModel")
# Manually update the timestamp so the lakehouse can merge data
instance.updated_at = deletion_time
# Write the serialized object to the cloud
blacklist = syncmodel.get_blacklist()
serialized = Serializer.serialize_object(instance, blacklist)
CloudActions.write_delete_file(
contenttype.app_label, contenttype.model, serialized.getvalue()
)
А в файле apps.py я добавил этот приемник:
def ready(self):
"""Import signals"""
from lakehouse_sync.core import delete_action
post_delete.connect(delete_action, sender=SyncModel, dispatch_uid=model.__name__)
print('deleting')
for model in SyncModel.__subclasses__():
post_delete.connect(delete_action, sender=model, dispatch_uid=model.__name__)
Моя проблема связана с дочерними моделями, потому что когда я удаляю строку из дочерних моделей через панель администратора, сигнал не срабатывает
Я понятия не имею, как решить эту проблему.