He examinado las preguntas relacionadas, pero ninguna de las respuestas parece funcionar. Estoy tratando de cargar una imagen de perfil para un usuario y hacer que reemplace (sobrescribir) la imagen actual. Al guardar la imagen, quiero cambiar el nombre del archivo a la identificación del usuario. En su forma actual, la imagen se cargará, pero no reemplazará la imagen existente (por ejemplo, se guardará como 2_1.png).Carga de la imagen de perfil con 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})
Gracias. Esa es una respuesta que encontré, pero quería que el ModelForm manejara el guardado. Terminé subclasificando FileSystemStorage para sobrescribir una imagen existente y usando el nuevo almacenamiento en el campo de imagen bajo el Modelo de perfil de usuario. – dvw
Oh, está bien. ¡Es genial escuchar que lo hiciste funcionar! – randrumree
Tu código tiene un pequeño error tipográfico. dest.write (fragmento) –