0
我想實現一些信號來創建和刪除和刪除某些文件,這些文件是在創建或從數據庫中刪除實例時生成的。信號post_delete和post_save的使用有什麼不同嗎?
現在下面的代碼工作:
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信號(而不是寫保存方法)時,它不起作用。信號從未被調用。
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的方式有什麼不同嗎?
多重繼承是否可能以一種奇怪的方式影響這個?
感謝。它的工作原理,但我仍然有問題。它在任何相關的保存中被調用。當我嘗試在connect中使用sender參數時,它不起作用'post_save.connect(gen_key,sender = Document',dispatch_uid =「my_unique_identifier」)'。 –