Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 23, 2008 11:36:03

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Я создаю ImageField в моей модели

uploaded_icon = models.ImageField(upload_to = ‘images/user_icons/’, blank = True, null = True)

Я хочу сделать так, чтобы когда пользователь загружает картинку, а картинка с таким именем уже есть, она заменялась на ту, которую загружает ползователь. Позволяет ли ImageField сделать это, и если да, то как, или как это можно сделать другими средствами?



Офлайн

#2 Июнь 23, 2008 12:19:11

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Ммм. Тут есть некоторая логическая проблема.
1. Пользователь загрузил картинку с именем 1.bmp. В базе создалась запись №1, картинка записалась в папку.
Без изменений:
2. Пользователь загружает картинку с таким же именем. В базе создалась запись №2, картинка записалась в папку.
Так, как выхотите:
2. Пользователь загружает картинку с таким же именем. В базе создалась запись №2, картинка перезаписала картинку в папке. Теперь запись #1 b #2 ссылаются на одно и то же изображение. Тут, надо сказать, будут очень трудно находимые проблемы.
Не говоря о том, что теперь при удалении любой записи - или №1 или №2 картинка будет удалятся вместе с ней. Что, в свою очередь, значит, что запись, которая останется, будет ссылатся на несуществующий файл.

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

Как это сделать?
Использовать кастомные методы вместо стандартных методов моеделей.

Отредактировано (Июнь 23, 2008 12:22:50)

Офлайн

#3 Июнь 23, 2008 12:24:17

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

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



Отредактировано (Июнь 23, 2008 12:24:54)

Офлайн

#4 Июнь 23, 2008 12:43:33

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

я решаю проблему с загрузкой аватарок. А файл руками переименовываю, т.е. для юзера аватара лежит всегда с одним и тем же именем.
Руками, это как?
А почему запись №2 в базе будет создаваться?
Потому что вы ее добавляете, как я понял из вопроса.
Что бы не создавалась новая запись нужно использовать или свой save, или метод update() (если одновременно обновить нужно много записей).
Например с помощью get_or_create - получите или существующюю запись, и ее отредактируете, или создадите новую…
Честно говоря я немного запутался в самой задаче. Вы бы дали саму модель, было бы понятнее что именно вы хотите сделать.

Офлайн

#5 Июнь 23, 2008 12:52:35

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Это поле модели:
uploaded_icon = models.ImageField(upload_to = ‘images/user_icons/’, blank = True, null = True)

Попробую описать задачу немного по другому. Пользователь загружает картинку. Эта картинка переименовывается (имя вида id_< Id юзера>) и складывается в images/user_icons/. Если пользователь хочет сменить аватару, он повторно загружает картинку. При этом его старая аватара должна удалится, а новая записатся на ее место.



Офлайн

#6 Июнь 23, 2008 12:55:55

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Мне тут попалась такая строка в доке:

dispatcher.connect(self.delete_file, signal=signals.post_delete, sender=cls)

Не могу понять что она делает



Офлайн

#7 Июнь 23, 2008 12:59:11

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

куиуд
Не могу понять что она делает
Цепляет обработчик (где файлы подчищаются) к сигналу удаления объекта.



Офлайн

#8 Июнь 23, 2008 13:07:55

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Может имеет смысл использовать его для решения моей проблемы?



Офлайн

#9 Июнь 23, 2008 13:40:10

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

куиуд
Может имеет смысл использовать его для решения моей проблемы?
В той форме, в которой вы описали свою проблему, это вам не поможет её решить. Это немного другая степь. Вам надо смотреть метод `_save_FIELD_file` у модели



Офлайн

#10 Июнь 23, 2008 14:48:17

куиуд
От:
Зарегистрирован: 2008-04-02
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

ImageField - удаление файлов

Так и сделаю. Спасибо за помощь.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version