インスタンスがデータベースから作成または削除されたときに生成されるいくつかのファイルを作成および削除および削除するためのいくつかのシグナルを実装しようとしています。
現在、次のコードが機能しています。
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 シグナルが機能しています。(save メソッドを上書きする代わりに) 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 の設定方法に違いはありますか?
多重継承がこれに奇妙な影響を与えている可能性はありますか?