我正在尝试实现几个信号来创建、删除和删除在从数据库中创建或删除实例时生成的一些文件。
现在下面的代码正在工作:
class Document(TimeStampedModel, StatusModel):
...
def save(self, *args, **kwargs):
create = self.pk is None
super(Document, self).save(*args, **kwargs)
if create:
os.makedirs(self.get_root_path())
self.process_file()
from django.db.models.signals import post_delete, post_save
from django.dispatch.dispatcher import receiver
@receiver(post_delete, sender=Document)
def document_delete(sender, instance, **kwargs):
shutil.rmtree(instance.get_root_path(), ignore_errors=True)
instance.docfile.delete(False)
post_delete 信号正在工作。当我尝试设置 post_save 信号(而不是重写 save 方法)时,它不起作用。信号永远不会被调用。
class Document(TimeStampedModel, StatusModel):
...
from django.db.models.signals import post_delete, post_save
from django.dispatch.dispatcher import receiver
@receiver(post_delete, sender=Document)
def document_delete(sender, instance, **kwargs):
shutil.rmtree(instance.get_root_path(), ignore_errors=True)
instance.docfile.delete(False)
@receiver(post_save, sender=Document)
def document_save(sender, instance, created, **kwargs):
print "this is never called"
if created:
os.makedirs(instance.get_root_path())
instance.process_file()
我必须配置 post_delete 和 post_save 的方式有什么区别吗?
多重继承是否有可能以一种奇怪的方式影响这一点?