from django.db import models
from sorl.thumbnail import ImageField
from sorl.thumbnail.shortcuts import get_thumbnail
from sorl.thumbnail import delete
import settings
import os
class Book(models.Model):
......................................................
title = models.CharField(u'название', max_length=50)
cover = ImageField(upload_to='img/covers/', blank=True, null=True, verbose_name=u'обложка')
def small_cover(self):
if self.cover:
resize_cover = get_thumbnail(self.cover, '60x80', crop='center', quality=99)
html = '<a href="%s%s"><img src="%s" title="%s" /></a>'
return html % (settings.MEDIA_URL, self.cover, resize_cover.url, self.title)
else:
return u'отсутствует'
small_cover.short_description = u'миниатюра'
small_cover.allow_tags = True
def save(self):
try:
old_cover = Book.objects.get(id=self.id)
except Book.DoesNotExist:
pass
else:
if old_cover.cover and old_cover.cover != self.cover:
path_cover = os.path.join(settings.MEDIA_ROOT, '%s') % old_cover.cover
#path_small_cover = os.path.join(settings.MEDIA_ROOT, '%s') % resize_cover.url
if os.path.exists(path_cover):
delete(old_cover.cover)
#if os.path.exists(path_small_cover):
#delete(resize_cover.url)
super(Book, self).save()
А вот допустим когда я хочу изменить обложку, то надо сначала удалить старый оригинал и его миниатюру. Для этого я переопределил метод save(). Он без проблем удаляет оригинал. А вот как грамотно получить url миниатюры resize_cover.url из метода small_cover не догоняю.
Вопросы возникли следующие:
1) Нормально ли использовать html прямо в методе small_cover? Если нет, то как нужно делать правильно?
2) Правильно ли я делаю удаление старых файлов? или есть другой способ?
3) Как удалить миниатюру? т.е как достучаться до ее url(resize_cover.url)?