我有一个信号用于post或pre-delete我不知道该用哪个,但我的问题是,为什么这个信号没有激活?它从不将文件保存在目录中。它什么都不做。你知道吗
代码如下:
@receiver(post_delete, sender=ClientUpload)
def clientupload_postdelete(sender, instance, **kwargs):
filename = os.path.basename(instance.file_upload.path)
client = instance.file.client
if instance.file_upload:
copyfile(instance.file_upload.path, settings.MEDIA_ROOT + '/uploads/Recycle/' + client + '/' + filename)
logger = logging.getLogger(__name__)
logger.info("File %s moved to %s" % (filename, settings.MEDIA_ROOT + 'uploads/Recycle/'))
# Pass False so FileField doesn't save the model.
instance.file_upload.delete(False)
else:
logger = logging.getLogger(__name__)
logger.warning("Failed to find file %s for copying to %s." % (filename, settings.MEDIA_ROOT + '/uploads/Recycle/'))
以下是模型ClientUpload:
@python_2_unicode_compatible
class ClientUpload(models.Model):
client = models.ForeignKey(Client)
created_at = models.DateTimeField(auto_now_add=True)
file_upload = models.FileField(upload_to=generate_filename)
def __str__(self):
return self.client.company
class Meta:
verbose_name_plural = _("Client Uploads")
verbose_name = _("Client Upload")
知道它为什么不起作用吗?任何帮助都将不胜感激。你知道吗
你在注册信号处理程序吗?仅仅用
receiver
装饰器来注释函数是不够的。假设您在signals.py
中定义处理程序函数,那么您可以这样做:应用程序.py
\uuu init\uuuuuuuuuy.py
从Django 1.8 docs:
编辑:
子类化
AppConfig
并在ready
方法中导入单独的signals
模块不需要让信号工作;最好的做法是避免同一个信号处理程序在Django启动时连接多次。我所展示的并不是连接信号处理程序的唯一方法,而是推荐的方法。你知道吗相关问题 更多 >
编程相关推荐