Загрузка изображения профиля с помощью Django ModelForm
Я посмотрел вокруг на связанные вопросы, но ни один из ответов, похоже, не работает. Я пытаюсь загрузить изображение профиля для пользователя и заменить его (перезаписать) текущее изображение. После сохранения изображения я хочу изменить имя файла на идентификатор пользователя. В текущей форме изображение будет загружено, но оно не заменит существующее изображение (например, оно будет сохранено как 2_1.png).
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})
1 ответ
Решение
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():
handle_uploaded_file(request.FILES['<name of the FileField in models.py>'])
def handle_uploaded_file(f):
dest = open('/path/to/file', 'wb') # write should overwrite the file
for chunk in f.chunks():
dest.write(chunk)
dest.close()
проверьте здесь: https://docs.djangoproject.com/en/dev/topics/http/file-uploads/ Если это не сработает, я полагаю, вы можете просто использовать os.system для удаления файла, если форма принята, Вероятно, это было бы не лучшим решением, но оно должно работать.