Django - обновление модель не удалит старый FileField

Я реализовываю приложение с django, который имеет модель с FileField:

class Slideshow(models.Model):
    name = models.CharField(max_length=30,unique=True)
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails")

и у меня есть администраторский бэкенд, где django управляет моделями. Я просто добавил файл admin.py, и django управляет всем для меня

from django.contrib import admin

from apps.gallery.models import Slideshow

admin.site.register(Slideshow)

В бэкенде возможно добавить, удалить и обновить слайд-шоу. Однако, когда я пытаюсь обновить слайд-шоу и изменить его миниатюру атрибута [FileField], django не удаляет старый файл. Следовательно, после нескольких обновлений сервер заполнен многими файлами, которые бесполезны. Мой вопрос: как я могу заставить django удалить те файлы автоматически после обновления?

Я был бы очень признателен за Вашу справку

6
задан Raul San N.H. 7 January 2010 в 22:01
поделиться

1 ответ

Я уверен, что Джанго делает это по замыслу. Он не может знать, например, используют ли другие модели этот файл. Вы также были бы очень удивлены, если бы ожидали, что файл останется, и обнаружили, что django удалил его!

Однако, есть также проблема, что как только вы меняете поле файла, вы теряете старое имя файла.

Есть открытый билет на эту проблему: http://code.djangoproject.com/ticket/11663

В http://code.djangoproject.com/ticket/2983 есть патч, который показывает, как переопределить __set__, чтобы сохранить предыдущее имя файла. Тогда метод __save__ вашей модели может получить доступ к имени предыдущего файла для его удаления.

1
ответ дан 17 December 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: