Ho dato un'occhiata a domande correlate, ma nessuna delle risposte sembra funzionare. Sto cercando di caricare un'immagine del profilo per un utente e farlo sostituire (sovrascrivere) l'immagine corrente. Al salvataggio dell'immagine voglio cambiare il nome del file nell'id utente. Nella sua forma attuale l'immagine verrà caricata, ma non sostituirà l'immagine esistente (ad esempio, verrà salvata come 2_1.png).Caricamento immagine profilo 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})
Grazie. Questa è una risposta che ho trovato, ma volevo che ModelForm gestisse il salvataggio. Ho finito con la sottoclasse di FileSystemStorage per sovrascrivere un'immagine esistente e utilizzare la nuova memoria nel campo immagine sotto il Modello Profilo Utente. – dvw
Oh okay. E 'fantastico sentirti al lavoro! – randrumree
Il tuo codice ha un piccolo errore di battitura. dest.write (pezzo) –