Форум сайта python.su
Я создаю ImageField в моей модели
uploaded_icon = models.ImageField(upload_to = ‘images/user_icons/’, blank = True, null = True)
Я хочу сделать так, чтобы когда пользователь загружает картинку, а картинка с таким именем уже есть, она заменялась на ту, которую загружает ползователь. Позволяет ли ImageField сделать это, и если да, то как, или как это можно сделать другими средствами?
Офлайн
Ммм. Тут есть некоторая логическая проблема.
1. Пользователь загрузил картинку с именем 1.bmp. В базе создалась запись №1, картинка записалась в папку.
Без изменений:
2. Пользователь загружает картинку с таким же именем. В базе создалась запись №2, картинка записалась в папку.
Так, как выхотите:
2. Пользователь загружает картинку с таким же именем. В базе создалась запись №2, картинка перезаписала картинку в папке. Теперь запись #1 b #2 ссылаются на одно и то же изображение. Тут, надо сказать, будут очень трудно находимые проблемы.
Не говоря о том, что теперь при удалении любой записи - или №1 или №2 картинка будет удалятся вместе с ней. Что, в свою очередь, значит, что запись, которая останется, будет ссылатся на несуществующий файл.
Я не знаю, какую вы задачу решаете, но мне кажется что такая замена - не очень хорошая идея.
Скорее имеет смысл проверять есть ли такой файл, и если есть - не добавлять новую запись, а редактировать существующюю.
Как это сделать?
Использовать кастомные методы вместо стандартных методов моеделей.
Отредактировано (Июнь 23, 2008 12:22:50)
Офлайн
я решаю проблему с загрузкой аватарок. А файл руками переименовываю, т.е. для юзера аватара лежит всегда с одним и тем же именем. А почему запись №2 в базе будет создаваться?
Отредактировано (Июнь 23, 2008 12:24:54)
Офлайн
я решаю проблему с загрузкой аватарок. А файл руками переименовываю, т.е. для юзера аватара лежит всегда с одним и тем же именем.Руками, это как?
А почему запись №2 в базе будет создаваться?Потому что вы ее добавляете, как я понял из вопроса.
Офлайн
Это поле модели:
uploaded_icon = models.ImageField(upload_to = ‘images/user_icons/’, blank = True, null = True)
Попробую описать задачу немного по другому. Пользователь загружает картинку. Эта картинка переименовывается (имя вида id_< Id юзера>) и складывается в images/user_icons/. Если пользователь хочет сменить аватару, он повторно загружает картинку. При этом его старая аватара должна удалится, а новая записатся на ее место.
Офлайн
Мне тут попалась такая строка в доке:
dispatcher.connect(self.delete_file, signal=signals.post_delete, sender=cls)
Не могу понять что она делает
Офлайн
куиудЦепляет обработчик (где файлы подчищаются) к сигналу удаления объекта.
Не могу понять что она делает
Офлайн
Может имеет смысл использовать его для решения моей проблемы?
Офлайн
куиудВ той форме, в которой вы описали свою проблему, это вам не поможет её решить. Это немного другая степь. Вам надо смотреть метод `_save_FIELD_file` у модели
Может имеет смысл использовать его для решения моей проблемы?
Офлайн
Так и сделаю. Спасибо за помощь.
Офлайн