Почему не удаляются загруженные файлы?

Здравствуйте!
Начал изучать django, решил в качестве тренировки сделать фотогаллерею.
Загружаю через админку фотографии, все получается на ура: и сами фотографии, и миниатюры. А вот удалять из админки не удается: запись удаляется, а сами файлы остаются. Сначала решил, что проблема в правах доступа, сделал chmod 777 photos - не помогло.
Помогите! Не знаю, в чем ошибка!

Вот содержимое models:
from django.db import models
from items.fields.ThumbnailImageField import ThumbnailImageField

class Album(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

    def __unicode__(self):
        return self.name

class Photo(models.Model):
    item = models.ForeignKey(Album)
    title = models.CharField(max_length=100)
    image = ThumbnailImageField(upload_to='photos')
    caption = models.CharField(max_length=250, blank=True)

    def __unicode__(self):
        return self.title

А здесь содержимое ThumbnailImageField:
from django.db.models.fields.files import ImageField, ImageFieldFile
from PIL import Image
import os

def _add_thumb(s):
    parts = s.split(".")
    parts.insert(-1, "thumb")
    if parts[-1].lower() not in ['jpeg', 'jpg']:
        parts[-1] = 'jpg'
    return ".".join(parts)

class ThumbnailImageFieldFile(ImageFieldFile):
    def _get_thumb_path(self):
        return _add_thumb(self.path)

    thumb_path = property(_get_thumb_path)

    def _get_thumb_url(self):
        return _add_thumb(self.url)

    thumb_url = property(_get_thumb_url)

    def save(self, name, content, save=True):
        super(ThumbnailImageFieldFile, self).save(name, content, save)
        img = Image.open(self.path)
        img.thumbnail(
            (self.field.thumb_width, self.field.thumb_height),
            Image.ANTIALIAS
        )
        img.save(self.thumb_path, 'JPEG')

    def delete(self, save=True):
        if os.path.exists(self.thumb_path):
            os.remove(self.thumb_path)
        super(ThumbnailImageFieldFile, self).delete(save)

class ThumbnailImageField(ImageField):
    attr_class = ThumbnailImageFieldFile

    def __init__(self, thumb_width=128, thumb_height=128, *args, **kwargs):
        self.thumb_width = thumb_width
        self.thumb_height = thumb_height
        super(ThumbnailImageField, self).__init__(*args, **kwargs)
  • Вопрос задан
  • 2899 просмотров
Решения вопроса 1
un1t
@un1t
При удалении моделей delete для FileField не вызывается. До django 1.3 они как-то пытались удалять файлы, но были определенные проблемы. С 1.3 они вообще отказались от удаления файлов. Как я понимаю у них заморочка с транзакциями.

Как советовали выше django-cleanup тебе в помощь для удаления файлов, а для ресайза например sorl-thumbnail, easy-thumbnail или django-resized.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
desperadik
@desperadik
Истина где-то рядом.
Такая политика Django. "Все что "создается" в Вегасе - остается в Вегасе"
Django не удаляет загруженные файлы. =)
Юзай приложение django-cleanup от un1t.

pip install django-cleanup
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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