5
関連する質問を見回しましたが、答えがどれもうまくいかないようです。ユーザーのプロフィール画像をアップロードして、現在の画像を置き換える(上書きする)ようにしています。画像を保存すると、ファイル名をユーザーIDに変更します。現在の形式では画像はアップロードされますが、既存の画像は置き換えられません(例:2_1.pngとして保存されます)。ここDjango ModelFormを使用したプロフィール画像のアップロード
class PhotoForm(forms.ModelForm):
def save(self):
content_type = self.cleaned_data['photo'].content_type.split('/')[-1]
filename = '%d.%s' % (self.instance.user.id, content_type)
instance = super(PhotoForm, self).save(commit=False)
instance.photo = SimpleUploadedFile(filename, self.cleaned_data['photo'].read(), content_type)
instance.save()
return instance
class Meta:
model = UserProfile
fields = ('photo',)
def photo_form(request):
if request.method == 'POST':
form = PhotoForm(data=request.POST, file=request.FILES, instance=request.user.get_profile())
if form.is_valid():
form.save()
else:
form = PhotoForm()
return render(request, 'photo_form.html', {'form': form})
ありがとうございました。それは私が出会った答えですが、私はModelFormが保存を処理したかったのです。私はFileSystemStorageをサブクラス化して既存のイメージを上書きし、UserProfileモデルのimagefieldに新しいストレージを使用することになりました。 – dvw
大丈夫です。あなたはそれが働くことを聞いてよかった! – randrumree
コードに少し誤字があります。 dest.write(チャンク) –