Per qualche ragione in django la forma che sonotentare di utilizzare non è considerato valido. Questo codice è preso quasi direttamente da un sito che afferma che funziona ma non è ancora funzionante. il mio codice è il seguente.
VISUALIZZAZIONI
def display_update_image(request, pk):
if request.method == "POST":
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
display = Display.objects.get(pk = pk)
display.image = form.cleaned_data["image"]
display.save()
return HttpResponseRedirect(reverse("displays"))
else :
form = ImageForm()
return render(request, "catalog/update_display_image.html", {"form": form})
TEMPLATE (il nome del modello è update_display_image.html)
<form method = "post" enctype = "multipart/form-data">{% csrf_token %}
<p>
<input id = "id" type = "file" class = "" name = "image">
</p>
<input type = "submit" value = "Submit" />
MODELLI
class Display(models.Model):
title = models.CharField(max_length = 50,)
image = models.ImageField(upload_to = "images")
id = models.UUIDField(primary_key = True, default = uuid.uuid4, unique = True)
def __str__(self):
return self.title
modifica: dimentica di inserire il codice dei moduli scusa
class ImageForm(forms.Form):
image = forms.ImageField()
ulteriore modifica: cambiare la mia classe di form in this
class ImageForm(forms.Form):
class Meta:
model = Display
fields = ("image",)
Consente di leggere il modulo come valido per qualche motivo anche se non ne capisco il motivo. Sfortunatamente ciò impedisce al mio metodo di visualizzazione di funzionare correttamente in quanto non può più leggere
display.image = form.cleaned_data["image"]
risposte:
2 per risposta № 1Se formi la classe è una forma modello: class ImageForm(forms.ModelForm):
puoi passare l'istanza al form e salvarlo.
def display_update_image(request, pk):
if request.method == "POST":
display = Display.objects.get(pk = pk)
form = ImageForm(request.POST, request.FILES, instance=display)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse("displays"))
else :
form = ImageForm()
return render(request, "catalog/update_display_image.html", {"form": form})
0 per risposta № 2
In forms.py
controlla di avere un Django Form come questo:
class ImageForm(forms.ModelForm):
class Meta:
model = Display
fields = ["image",]
In template
Inserisci {{ form }}
invece di usare manualmente input
, come questo:
<form method="post" enctype="multipart-formdata>
{% csrf_token %}
{{ form }}
<input type="submit" value="Update Image">