Я работал над этим в течение 3 дней подряд, и я в своем уме.Мне нужен кто-то, чтобы объяснить буквально шаг за шагом, что именно происходит в этом процессе и каковы фактические данные (или как они выглядят) на каждом шаге.
У меня есть модель с ImageField ()внутри него.У меня есть форма, основанная на этой модели.Я передаю форму в шаблон, этот шаблон передает заполненные данные формы в представление.Затем я привязываю данные request.FILES к экземпляру модели / формы и сохраняю их.
Я хочу использовать этот загруженный файл в качестве изображения профиля для своих пользователей, и я хотел быизменить его размер до того, как он будет сохранен в модели.
После того как я проверил данные, я передаю данные request.FILES ['file'] в функцию, и внутри этой функции PIL открываетданные.Он открывается нормально, каждый раз, когда у меня нет проблем с PIL, который видит эти данные непосредственно из файла InMemory.Однако я не могу заставить PIL выводить эти отредактированные данные в то, что Django ищет в своем ImageField ().Я в основном хочу взять эти загруженные данные, изменить их размер, переименовать, а затем сохранить их через ImageField () и позволить Django обрабатывать их оттуда.
Представление:
if request.method == "POST":
user_form = EditUserProfile(request.POST, instance=User.objects.get(id=request.user.id))
siteprofile_form = EditSiteProfile(request.POST, request.FILES, instance=SiteProfile.objects.get(user=request.user))
if user_form.is_valid() and siteprofile_form.is_valid():
user_form.save()
temp_siteprofile = siteprofile_form.save(commit=False)
temp_siteprofile.profile_image = process_image_string(request.FILES['profile_image'], (100, 100))
temp_siteprofile.save()
return user_profile(request, request.user.username)
функция:
def process_image_string(f, size):
f_image = Image.open(f)
f_image = f_image.resize(size)
output = StringIO()
f_image.save(output, "JPEG")
return output
Пожалуйста, имейте в виду, что функция менялась, вероятно, 100 раз за последние 3 дня, это был (на мой взгляд) мой ближайший успех.