LINUX.ORG.RU

Сохранение данных из одного поля модели в другое

 


0

1

Есть у меня ImageWithThumbsField, который основан на ImageField. В нем во время save() генерится превьюшка и сохраняется в некий файл (имя файла известно и основано на имени файла основной картинки). Нужно сохранять размеры превьюшки по тому же принципу, по которому они сохраняются в width_field и height_field у ImageField'а. Я пробовал 2 варианта:

1) Делать это в том месте, где превьюшки генерятся (внутри save()). Оно вроде бы работает, данные сохраняются. Но по завершении работы с моделью в полях снова нули (дефолтные значения). Насколько я понимаю, они инициализируются позже, чем данное поле сохраняет туда значения.

2) Переопределить update_dimension_fields. Но в нем я не могу достать файлы превьюшек, чтобы вычислить их размер (а просто так размер мне уже неизвестен, он после операций по генерации никуда не сохраняется). Если работать через storage.open и имя превьюшки, оно достает имя без учета переменной upload_to, которая у меня заменена на метод.

Вопрос: как и где правильно сохранить искомые поля?

★★★★★

С первым пунктом у тебя проблема в том, что запись в БД осуществляется во время вызова super(ImageWithThumbsFieldFile, self).save(name, content, save), а значения полей ты присваиваешь после этого вызова. Поэтому они в БД не попадают. Если ты переставишь вызов super то все должно быть ок.

Есть еще вариант использовать сигналы https://docs.djangoproject.com/en/1.6/ref/signals/#django.db.models.signals.p...

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

provaton ★★★★★ ()
Последнее исправление: provaton (всего исправлений: 1)

Да ты достал со своей быдлокодерней. Иди в Web-development.

anonymous ()
Ответ на: комментарий от provaton

Не понял сути. Судя по их примеру, у них тоже размеры превьюшек не сохраняются.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

При чем как-то странно. Я попробовал вызывать instance.save() после операций с полем — вроде бы сохраняет, даже на выходе из Post.objects.create выдает модель с нужными значениями в полях. Но пока оно доходит до отдачи данных клиенту, там уже нули. Кто еще может сбросить поля?

vurdalak ★★★★★ ()

ImageWithThumbsField, который основан на ImageField

Юзай просто ImageField. Сохраняй первьюхи добавляя к имени файла '_thumb_'.

matrixd ()
Ответ на: комментарий от stevejobs

Его в /web, тебя в /talks. Нубы должны знать свое место.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.