我有一个从ImageField继承的字段,其中包含一个自定义存储:
image = PicasaImageField(upload_to=get_upload_to, blank=True, storage=pwcs())
使用此字段删除对象时(使用object.delete(),NOT bulk),不会调用自定义存储的delete方法。试图调试,我找不到Django通过对象的字段来删除文件或实际存储中的任何内容。或者我应该手动/在钩子中删除文件/将自定义delete()方法写入我的结束模型,该模型将在实际对象上调用后台的delete()?我没有找到如何使用标准的ImageFile +默认文件系统处理它,但会假设常规文件将被删除。或者我弄错了?
感谢您的任何见解。
伊戈尔
答案 0 :(得分:1)
删除模型时,不会调用FileField的delete()方法。如果您需要清除孤立文件,则需要自己处理
正如您所建议的那样,您可以在自定义删除方法中处理此问题:
def delete(self, *args, **kwargs):
image.delete(save=False)
super(Foo, self).delete(*args, **kwargs)
或者使用接收函数,即使没有调用object.delete(),也会调用它:
@receiver(post_delete, sender=Foo, weak=False)
def delete_image_on_file(sender, instance, **kwargs):
image.delete(save=False)