Я реализовываю приложение с 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 удалить те файлы автоматически после обновления?
Я был бы очень признателен за Вашу справку
Я уверен, что Джанго делает это по замыслу. Он не может знать, например, используют ли другие модели этот файл. Вы также были бы очень удивлены, если бы ожидали, что файл останется, и обнаружили, что django удалил его!
Однако, есть также проблема, что как только вы меняете поле файла, вы теряете старое имя файла.
Есть открытый билет на эту проблему: http://code.djangoproject.com/ticket/11663
В http://code.djangoproject.com/ticket/2983 есть патч, который показывает, как переопределить __set__
, чтобы сохранить предыдущее имя файла. Тогда метод __save__
вашей модели может получить доступ к имени предыдущего файла для его удаления.