Перед сохранением модели я изменяю размер изображения. Но как я могу проверить, добавлено ли новое изображение или просто обновлено описание, чтобы я мог пропустить изменение масштаба каждый раз при сохранении модели?
class Model(model.Model):
image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def save(self, *args, **kwargs):
if self.image:
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
Я хочу изменить масштаб только при загрузке нового изображения или обновлении изображения, но не при обновлении описания.
Ответы:
Некоторые мысли:
Не уверен, что это будет хорошо работать со всеми псевдо-автоматическими инструментами django (пример: ModelForm, contrib.admin и т. Д.).
источник
Проверьте поле pk модели. Если это None, то это новый объект.
Изменить: я добавил проверку на «изображение» в form.changed_data. Это предполагает, что вы используете сайт администратора для обновления изображений. Вам также придется переопределить метод save_model по умолчанию, как указано ниже.
источник
Вы можете предоставить дополнительный аргумент для подтверждения публикации нового изображения.
Что-то вроде:
или передать переменную запроса
Я думаю, что при простом вызове они не сломают ваш сейв.
Вы можете поместить это в свой admin.py, чтобы он работал и с сайтом администратора (для второго из вышеперечисленных решений):
источник
Для достижения цели я сделал это ..
а ниже метод save () это ..
поэтому, когда я редактирую некоторые поля, но не редактирую изображение, я помещаю это ..
вы можете заменить
"skip creating photo thumbnail"
с"im just editing the description"
или более формальным текстом.Надеюсь, это поможет!
источник
Запросите в базе данных существующую запись с тем же PK. Сравните размеры файлов и контрольные суммы новых и существующих изображений, чтобы увидеть, совпадают ли они.
источник
Django 3: переопределение предопределенных методов модели
источник
В новой версии это так:
источник
Я нашел еще один простой способ хранить данные в базе данных
models.py
В базе данных всего 2 переменные
views.py
В этом случае я создал экземпляр модели только в views.py и поместил / сохранил данные в 2 переменные только из представлений.
источник