私はこれを3日間連続して作業しています。私はウィットの終わりです。私は、このプロセスで正確に何が起こっているのか、実際のデータが各ステップでどのように見えるか(または見えるか)のリテラルを段階的に説明する必要があります。Djangoでのファイルのアップロード/処理
私はImageField()を内部に持つモデルを持っています。私はそのモデルに基づいてフォームを持っています。私はテンプレートにフォームを渡し、そのテンプレートは完成したフォームデータをビューに渡します。次に、要求をバインドします。モデル/フォームのインスタンスにデータをファイル化して保存します。
私がしたいことは、このアップロードされたファイルをユーザーのプロフィール写真として使用することです。モデルに保存する前にサイズを変更したいと思います。
私はデータを検証した後、request.FILES ['file']データを関数に渡しています。この関数の内部でPILがデータを開きます。 PILに問題がないたびに、このデータをInMemoryファイルから直接見ることができます。しかし、私はこの編集されたデータを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
機能はこれが(私の目に)私の最も近かった、最後の3日間で、おそらく100回変更されていますのでご注意ください成功。
あなたは上記のコードがスローするエラーを提供してくださいだろうか? – Paulo
'cStringIO.StringO'オブジェクトに '_committed'属性がありません –