Метод удаления () пользовательского хранилища не вызывается в Django - PullRequest
0 голосов
/ 17 января 2012

У меня есть поле, которое наследуется от ImageField с пользовательским хранилищем, как это:

image = PicasaImageField(upload_to=get_upload_to, blank=True, storage=pwcs())

При удалении объекта с этим полем (используя object.delete (), НЕ объемный), метод удаленияпользовательское хранилище не вызывается.Пытаясь отладить, я не смог найти, где Django просматривает поля объекта, чтобы удалить файл, или что-то еще в реальном хранилище.Или я должен удалить файл вручную / в хуке / написать собственный метод delete () в моей конечной модели, которая вызовет закулисное удаление () для реального объекта?Мне не удалось найти, как это обрабатывается стандартной файловой системой ImageFile + по умолчанию, но я предполагаю, что обычные файлы будут удалены.Или я ошибаюсь?

Спасибо за любые идеи.

Игорь

1 Ответ

1 голос
/ 17 января 2012

Из примечаний к выпуску Django 1.3 :

при удалении модели метод FileField delete () вызываться не будет.Если вам нужна очистка потерянных файлов, вам придется обрабатывать их самостоятельно

. Как вы и предлагали, вы можете обработать это с помощью специального метода удаления:

def delete(self, *args, **kwargs):
    image.delete(save=False)
    super(Foo, self).delete(*args, **kwargs)

или использоватьфункция-получатель, которая будет вызываться, даже если не вызывается object.delete ():

@receiver(post_delete, sender=Foo, weak=False)
def delete_image_on_file(sender, instance, **kwargs):
    image.delete(save=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...