我在我的一个模型中有以下代码
class PostImage(models.Model):
post = models.ForeignKey(Post, related_name="images")
# @@@@ figure out a way to have image folders per user...
image = models.ImageField(upload_to='images')
image_infowindow = models.ImageField(upload_to='images')
image_thumb = models.ImageField(upload_to='images')
image_web = models.ImageField(upload_to='images')
description = models.CharField(max_length=100)
order = models.IntegerField(null=True)
IMAGE_SIZES = {
'image_infowindow':(70,70),
'image_thumb':(100,100),
'image_web':(640,480),
}
def delete(self, *args, **kwargs):
# delete files..
self.image.delete(save=False)
self.image_thumb.delete(save=False)
self.image_web.delete(save=False)
self.image_infowindow.delete(save=False)
super(PostImage, self).delete(*args, **kwargs)
当对PostImage
调用delete()方法时,我试图删除这些文件。但是,这些文件不会被删除。在
如您所见,我重写了delete()方法,并删除了每个ImageField
。但是由于某些原因,这些文件没有被删除。在
可以使用多个方法删除模型实例。在
一种方法是调用
delete()
:在本例中,
^{pr2}$delete()
被调用,因此文件将被删除。但是,也可以使用querysets删除对象:不同之处在于,使用后一种方法,Django将使用SQL
DELETE
命令批量删除对象,因此不调用每个对象的delete()
方法。因此,您可能正在使用querysets删除对象,因此不会删除文件。在您可以使用
post_delete
Django信号来解决此问题,如下所示:请注意,如果使用此方法,则不必再重写
delete()
方法。在有关此here和here的详细信息
相关问题 更多 >
编程相关推荐