2010-11-26 1 views
2

Я пытаюсь подкласса ImageField.Файл записи Django. Обнаруживать новый файл

В основном, мой MyImageField должен сохранять две фотографии в памяти при загрузке одного изображения. Сначала это оригинальная картина с именем blablabla.jpg, а вторая - фактическое имя эскиза с именем blablabla_thumb.jpg. но в databse у меня будет только одно поле с путём к орогинальному изображению. Чтобы получить изображение thumbnale, я создам метод MyImageField, который вызывает tumb, когда я делаю model.MyImageFiled.thumb он возвращает мне путь к файлу с префиксом thumb.

Вопрос в том, как определить, является ли FileField новый файл или просто модель сохраняет без изменения файла. Мне нужно это, чтобы решить, нужно ли мне создавать новые миниатюры (обрезка, конвертирование и прочее) или нет. Поэтому, если пользователь просто положил MyFileField в свою модель, и чем он делает изменение имени или описания в модели, это не делает файл большим пальцем снова.

Только я вижу здесь, чтобы сохранить дату, созданную и сравнимую. Если разные, сделайте большой палец, иначе нет.

ответ

2

это может быть работа для вас Django Thumbnails

+0

Это фактически тот же самый велосипед, который я пытался придумать. Большое спасибо! – Pol 2010-11-26 19:56:30

+0

вот правый ...! – eos87 2010-11-26 20:03:09

3

Это djangothumbnails.com никогда не было ничего хорошего, и теперь это не только это, но и никем не поддерживался, лучше использовать sorl-thumbnail или простые в эскизы.

1

Это общая проблема, я думаю - как определить в методе save() метод, был ли только что загружен файл. Обычно это было бы так, что вы можете сделать некоторую обработку только один раз (например, создание миниатюры) при первом просмотре файла.

Решение, которое мне не нравится, заключается в том, чтобы выполнить обработку, а затем префикс имени загруженного файла с известной строкой («p $») перед вызовом super (MyModel, self) .save() в храните его в БД.

Всякий раз, когда я получаю загрузку файла, я смотрю, начинается ли оно с «p $», указывая, что обработка не требуется.

Я думаю, что Django должен указать свой собственный флаг, чтобы указать, что загрузка только что произошла.

Смежные вопросы