ImageFieldFile对象没有属性startswith

时间:2013-02-22 15:40:49

标签: django django-models

在删除信号上使用django-storages package S3我试图从S3中删除图像我尝试了以下内容(见下文),但得到错误...

'ImageFieldFile'对象没有属性'startswith'

def product_pre_delete(sender, instance, **kwargs):
    """
    Sent at the beginning of a product delete() method product queryset's delete() method.
    """
    default_storage.delete(instance.qr_image)

models.signals.pre_delete.connect(product_pre_delete, sender=Product)

2 个答案:

答案 0 :(得分:1)

据我所知,django-storage只会删除对象本身时删除文件(向下滚动到删除部分)https://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html?highlight=delete

如果你想保留对象,但删除文件,你可能必须自己使用Boto来处理它,这是django-storage在使用S3时使用的底层库。

答案 1 :(得分:1)

我也遇到了这个问题,发现'ImageFieldFile'对象没有属性'startswith'引发错误,因为你使用的是文件对象而不是file.name。使用该对象可在本地使用,但不适用于AWS。以下代码应该可以正常工作,因为我能够成功删除仍与对象关联的文件。

default_storage.delete(instance.qr_image.name)