/ / Django Image Upload Form not valid - django, django-forms, django-templates

Django Image Upload Form non valido - django, django-forms, django-templates

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 № 1

Se 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">