#django #django-models #python-imaging-library
#django #django-модели #python-imaging-library
Вопрос:
Итак, в основном у меня есть модель django, в которой есть filefield. Я хотел бы изменить размер отправляемых изображений, и для этого у меня есть этот код
def save(self, *args, **kwargs):
img = Image.open(self.media)
output = BytesIO()
original_width, original_height = img.size
aspect_ratio = round(original_width / original_height)
desired_height = 100
desired_width = desired_height * aspect_ratio
img = img.resize((desired_width, desired_height))
img.save(output, format='JPEG', quality=90)
output.seek(0)
self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)
super(Post, self).save(*args, **kwargs)
Я получаю сообщение об ошибке: «имя’InMemoryUploadedFile’ не определено». Как мне это исправить? Также побочный вопрос. Модель также принимает видео. Как мне изменить размер видео? Это просто побочный вопрос, основной вопрос — InMemoryUploaded. Спасибо!
Ответ №1:
вы импортировали InMemoryUploadedFile?
пожалуйста, сначала импортируйте его
from django.core.files.uploadedfile import InMemoryUploadedFile
Комментарии:
1. Я не знал, что это было важно. Я немного покопался в документации Django и сказал, что это был класс, поэтому я подумал, что мне нужно его создать, но поскольку я никогда не работал с этим раньше, я был потерян
Ответ №2:
Вам не нужно использовать InMemoryUploadedFile
для сохранения файла. Также вы получаете сообщение об ошибке, потому что вы никогда не импортируете его. Чтобы импортировать его from django.core.files import InMemoryUploadedFile
. Вместо этого вам лучше использовать ContentFile
:
from django.core.files.base import ContentFile
...
def save(self, *args, **kwargs):
img = Image.open(self.media)
output = BytesIO()
original_width, original_height = img.size
aspect_ratio = round(original_width / original_height)
desired_height = 100
desired_width = desired_height * aspect_ratio
img = img.resize((desired_width, desired_height))
img.save(output, format='JPEG', quality=90)
output.seek(0)
self.image.save("%s.jpg" % self.image.name.split('.')[0], ContentFile(output), save=False)
super(Post, self).save(*args, **kwargs)