Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中未调用自定义存储删除()方法_Python_Django_Storage - Fatal编程技术网

Python Django中未调用自定义存储删除()方法

Python Django中未调用自定义存储删除()方法,python,django,storage,Python,Django,Storage,我有一个从ImageField继承的字段,它具有如下自定义存储: image = PicasaImageField(upload_to=get_upload_to, blank=True, storage=pwcs()) 删除具有此字段的对象时(使用object.delete(),而不是bulk),不会调用自定义存储的delete方法。尝试调试时,我找不到Django正在通过对象的字段删除文件或实际存储中的任何内容。或者我应该手动/在钩子中/在最终模型中写入一个自定义delete()方法来对实

我有一个从ImageField继承的字段,它具有如下自定义存储:

image = PicasaImageField(upload_to=get_upload_to, blank=True, storage=pwcs())
删除具有此字段的对象时(使用object.delete(),而不是bulk),不会调用自定义存储的delete方法。尝试调试时,我找不到Django正在通过对象的字段删除文件或实际存储中的任何内容。或者我应该手动/在钩子中/在最终模型中写入一个自定义delete()方法来对实际对象调用后台delete()?我没有找到标准ImageFile+默认文件系统是如何处理这一问题的,但我假设常规文件将被删除。还是我弄错了

谢谢你的见解

Igor来自:

删除模型时,不会调用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)

谢谢你,这就是我所缺少的。@IgorR我很高兴这就是你所寻找的,因此请你将其标记为已接受的答案好吗?