私は次のモデルを持っていFileField
ます:
class FileModel(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=200)
file = models.FileField(upload_to='myfiles')
でモデル インスタンスを削除すると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
です。
だから私の質問は:FileField
の delete メソッドを呼び出すとpost_delete
、モデルが削除されないのはなぜですか?