У меня есть модель с FileField
:Не удается удалить файл FileField в post_delete
class FileModel(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=200)
file = models.FileField(upload_to='myfiles')
При удалении экземпляра модели с FileField
, Джанго не автоматически удалять основной файл из файловой системы, так Я настроил сигнал, чтобы удалить базовый файл на post_delete
:
def on_delete(sender, instance, **kwargs):
instance.file.delete()
models.signals.post_delete.connect(on_delete, sender=FileModel)
проблема заключается в том, когда я удалить FileModel
объект (скажем, со страницы Джанго администратора) удаляет файл из файловой системы, но Безразлично» t удалить t он модель. Если я удалю его снова, он удалит модель, но затем вызывает исключение, когда пытается удалить файл из файловой системы, потому что файл не существует.
Когда я меняю удаление файла на pre_delete
вместо post_delete
, он ведет себя так, как должен. Единственное, что я могу подумать об этом, может привести к тому, что удаление файла из FileField
автоматически сохранит модель, что приведет к ее воссозданию в post_delete
.
Так что мой вопрос: почему вызов метода удаления FileField
в post_delete
предотвращает удаление модели?
Я ценю, что вы нашли время, чтобы исследовать это так тщательно. – dgel