#python #django
#питон #джанго
Вопрос:
Я сталкиваюсь с этой ошибкой в Django
'Image' object has no attribute '_committed'
Это моя модель:
class ProcessedPicture(models.Model):
processed_picture = models.ImageField(upload_to='processed_pictures')
Затем я обрабатываю картинку и присваиваю ей вот так:
def do_something():
...............
rgb = Image.fromarray(image)
return rgb
Затем я просто пытаюсь сохранить результат в хранилище S3. Ни бланков, ни запросов, ничего:
score = do_something()
processed = ProcessedPicture()
processed.processed_picture = score
processed.save()
И это приводит к сбою с вышеуказанной ошибкой. Есть какие-нибудь идеи, ребята?
Комментарии:
1. Я думаю, что проблема здесь в том, что вы передаете объект img и пытаетесь сохранить в БД, на самом деле в БД хранится только имя img, а не сам img, попробуйте передать файл, созданный из obj
2. Вы не можете назначить
score
ImageField
или, по крайней мере, напрямую. Вам нужно обернуть его вFieldFile
.
Ответ №1:
Затем я просто пытаюсь сохранить результат в хранилище S3.
Интерфейс a FileField
/ работает не так ImageField
. Вы не можете просто назначить Image
поле. Действительно, когда вы сохраняете изображение, у вас есть не только «данные изображения», но и, например, имя файла. Вы можете сохранить его в потоке памяти, который затем переносится в NamedTemporaryFile
:
from django.core.files import File
from django.core.files.temp import NamedTemporaryFile
with NamedTemporaryFile(delete=True) as img_tmp:
score = do_something()
score.save(img_tmp, format='JPEG')
img_tmp.flush()
processed = ProcessedPicture()
processed.processed_picture.save('name_of_the_file.jpg', File(img_tmp))
processed.save()
Комментарии:
1. Спасибо, приятель. Получил это, и это сработало. Приветствия