День добрый! Пожалуйста посоветуйте как сделать. Суть в том, что надо осуществлять загрузку фотографий на сервер с помощью формы, но чтобы фотки не грузились размером километр на километр, в этой форме должно быть предусмотрено поле с шириной изображения, до которой исходное будет ужиматься. Галерея организована в виде альбомов, каждый альбом принадлежит конкретному пользователю, если быть более точным, то выглядит примерно так
class Album(models.Model):
name = models.CharField(_('Name'), max_length=100, blank=False, null=False)
user = models.ForeignKey(User, verbose_name=_('User'), null=True, blank=True, related_name='albums')
created = models.DateTimeField(_('Created'), auto_now_add=True)
def __unicode__(self):
return self.name
class Image(models.Model):
description = models.TextField(verbose_name =_('Description'), blank=True, null=True)
image = ImageField(verbose_name = _('File'), upload_to=....)
album = models.ForeignKey('Album', verbose_name=_('Album'), null=False, blank=False, related_name='images')
Сам ресайзинг изображений вроде делается не так и сложно, но вот несколько вопросов есть.
1. Где именно (в каком методе) лучше производить ресайзинг?
2. Как лучше организовать поле для указания ширины, до которой будет ресайзиться изображение?
Про второй вопрос поясню. Это поле можно интегрировать в саму модель, тогда форма на основе этой модели будет автоматически его выводить. Другое дело, что хранить поле с шириной в модели вроде не очень логично, т.к. оно будет использоваться только один раз при обработке загруженного изображения и больше не нужно. Если поле ширины задавать не в модели, то видимо его нужно добавлять в форму. У меня тогда вопрос: как и куда в этом случае передавать значение ширины из формы для выполнения ресайзинга?
3. Для фотографий должны создаваться миниатюры, и тут можно пойти двумя путями. Во-первых можно не предусматривать в модели поле для миниатюр, а вместо этого использовать sorl thumbnail в шаблонах при выводе миниатюр на страницах. Но поскольку все миниатюры должны иметь лишь один размер 120х120 и к каждому фото создаются лишь один раз, то можно для превьюшек предусмотреть в модели дополнительное поле
thumb = ImageField(verbose_name = _('Mini'), upload_to=....)
В этом случае наверное базу будет дёргать меньше, но опять же вопрос: в каком именно месте (методе) размещать процедуру создания миниатюры?
Вот, засыпал вас вопросами,но не пинайте.