我有一个模型FileField
:
class FileModel(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=200)
file = models.FileField(upload_to='myfiles')
当您使用 a 删除模型实例时FileField
,django 不会自动从文件系统中删除基础文件,因此我设置了一个信号来删除以下基础文件post_delete
:
def on_delete(sender, instance, **kwargs):
instance.file.delete()
models.signals.post_delete.connect(on_delete, sender=FileModel)
问题是,当我删除一个FileModel
对象(比如说从 django 管理页面)时,它会从文件系统中删除文件,但不会删除模型。如果我再次删除它,它会删除模型,但是当它尝试从文件系统中删除文件时会引发异常,因为该文件不存在。
当我将文件删除更改为发生时pre_delete
,post_delete
它的行为应如此。我能想到的唯一会导致这种行为的是,如果从FileField
自动保存模型中删除文件,这将导致它在post_delete
.
所以我的问题是:为什么调用 aFileField
的 delete 方法来post_delete
防止模型被删除?