Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2011 11:45:12

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

Здравствуйте!
Имеется модель. Хранит данные об изображении в бд.

class Screenshot(models.Model):
image = models.ImageField(upload_to="screens/")

def __unicode__(self):
return self.image.name
Изображения загружаются из админки. Все хорошо, одно беспокоит. Загруженное изображение сохраняется со своим изначальным именем.
Хотелось бы его переименовывать в соответствии с определенным стандартом.
Вопрос в том, можно ли из описания модели повлиять на поведение админки?
Менять что-то в коде админки думаю совсем не элегантно, тем более, что в случае обновления Джанги все затрется.



Офлайн

#2 Июль 7, 2011 12:51:19

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

upload_to может быть callable
Django передаст в нее instance и текущее имя файла, а функция должна возвратить путь в Unix стиле.
соответственно что_то вроде:

class Screenshot(models.Model):
image = models.ImageField(upload_to= lambda inst, fname: '/screens/' + fname + 'blah')
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to



Отредактировано (Июль 7, 2011 12:53:29)

Офлайн

#3 Июль 8, 2011 09:12:39

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

Спасибо, работает.



Офлайн

#4 Июль 22, 2011 15:38:41

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

Есть еще вопрос. Получаю из формы загруженное изображение.

class Screenshot(models.Model):
image = models.ImageField(upload_to= lambda inst, fname: 'screens/scr.' + tools.getFileExt(fname))
C этим все ок.
Но хочется еще из полученного изображения получить превью. Т.е. создать копию, обрезать ее и сохранить на диск под другим именем. В идеале ссылку на него тоже сохранить в бд. Все эти манипуляции сам разберусь как сделать. Но не соображу, как получить в модели само изображение и на каком этапе производить манипуляции.



Офлайн

#5 Июль 22, 2011 16:09:11

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Работа с model.ImageField

sorl-thumbnail поставь или django-imagekit

Офлайн

#6 Июль 26, 2011 19:35:03

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

Пробую использовать django-imagekit.
https://github.com/jdriscoll/django-imagekit#readme
Но есть одна непонятка. Он генерит тумбнейлы, только выполняя команду

python manage.py ikflush myapp
Вручную лезть и выполнять ее после добавления каждой картинки как-то не элегантно.
Есть знакомые с пакетом? Можете подсказать, где грабли?



Офлайн

#7 Июль 26, 2011 19:51:33

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с model.ImageField

Разобрался, в модель обязательно требуется добавить дополнительное поле для счетчика просмотра изображений.
Думал в примере в документации оно не имеет значения.



Офлайн

#8 Июль 27, 2011 21:34:40

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Работа с model.ImageField

что-то ты не в ту степь разобрался)
я её давно юзал, но по идее p.thumbnail_image.url должно создавать превьюшку, если она ещё не была создана
лучше поиграйся в ./manage.py shell

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version