这里是在model Document的pre_delete上运行的东西。按照建议的最佳做法,将这些代码放在单独的文件(signals.py)中时会被忽略。当放在模型文件中时,它工作正常。Django pre_delete信号被忽略
from django.db.models.signals import pre_delete, pre_save
from django.dispatch import receiver
from _myTools.functions import ImageProcessing
from content_image.models import Document
import os
# Image deletion when deleting entire entry
@receiver(pre_delete, sender=Document, dispatch_uid='document_delete_signal')
def entry_deletion_images_delete(sender, instance, using, **kwargs):
for key, value in instance.imageSizes.items():
name_of_image_field = str(getattr(instance, key)) # Converts to string, if not is object itself
os.remove(instance.baseDir + name_of_image_field)
setattr(instance, key, None)
那么这是什么问题?我应该在那里输入更多东西吗?或者我应该将该文件导入某处?
感谢它的工作。这是否值得额外的复杂性?把它放在模型中有什么不对吗? –
取决于您计划发展您的应用程序的多少。如果它不会增长,那么把它放在'models'中。如果你打算重新分配它,使用一堆迁移的东西,一些奇怪的连接,添加单元测试等,那么它可能是值得的,因为你可能会避免一些错误,代码会更干净整齐。 – MariusSiuram
谢谢,如果我希望它是系统范围(不涉及特定的应用程序),我应该把它们不在app目录中,但在项目apps.py和__init__? –