Невозможно сохранить webp-файл в поле модели
Я не уверен, что это полностью связано с django, но если кто-то может мне помочь, я был бы очень признателен! У меня проблемы с генерацией webp файла из следующего кода
from io import BytesIO
from PIL import Image
import requests
У меня есть следующая модель
class UserImage(models.Model):
user_provided_image = VersatileImageField(upload_to=folder10, null=True, blank=True)
nextgen_image = models.FileField(upload_to=folder10,null=True, blank=True) #for WebP images
Я создаю webp-файл. Этот код работает, но он сохраняет его в файл в корневой каталог моего проекта, и я не уверен, как сохранить его в поле FileField (т.е. nextgen_image ) на моей модели
def create_webp_image(sender, instance, *args, **kwargs):
image_url = instance.image.thumbnail['1920x1080'].url
try:
response = requests.get(image_url, stream=True)
path = image_url
except: #local env
path = "http://localhost:8000" + image_url
response = requests.get(path, stream=True)
img = Image.open(BytesIO(response.content))
#build file path
position = path.rfind("/") + 1
newpath = path[0:position]
#build file name
image_name = path[position:]
name_of_file = image_name.split('.')[0] + ".webp"
#this creates the webp file
img.save(name_of_file,"webp")
#save image to model
#instance.nextgen_image = ?
post_save.connect(create_webp_image, sender=UserImage)
Спасибо!
Если вы хотите использовать пакеты для выполнения работы, то используйте этот пакет django-resized.
Основываясь на приведенном выше коде, это должно помочь. Надеюсь, это решит вашу проблему. Будьте здоровы
nextgen_image = ResizedImageField(force_format="WEBP",
upload_to=folder10,null=True, blank=True)
Вы можете использовать что-то вроде этого:
from django.core.files.base import ContentFile
...
img_content = ContentFile(BytesIO(response.content))
instance.nextgen_image.save(name_of_file, img_content, save=True)
...