/ / Formulaire de téléchargement d'image Django non valide - django, django-forms, django-templates

Formulaire Django Image Upload non valide - django, formulaires Django, modèles Django

Pour une raison quelconque dans Django la forme que je suisessayer d'utiliser n'est pas considéré comme valide. Ce code est tiré presque directement d'un site qui prétend qu'il fonctionne mais n'est toujours pas fonctionnel. mon code est le suivant.

VUES

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})

MODÈLE (le nom du modèle est 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" />

DES MODÈLES

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

edit: oublier de poster le code Forms désolé

class ImageForm(forms.Form):
image = forms.ImageField()

modification supplémentaire : changer ma classe de formulaires en ceci

class ImageForm(forms.Form):
class Meta:
model = Display
fields = ("image",)

Permet au formulaire d'être lu comme valide pour une raison quelconque, bien que je ne comprenne pas pourquoi. Malheureusement, cela empêche ma méthode de vues de fonctionner correctement car elle ne peut plus lire

display.image = form.cleaned_data["image"]

Réponses:

2 pour la réponse № 1

Si votre classe de formulaire est un formulaire de modèle : class ImageForm(forms.ModelForm): vous pouvez passer l'instance au formulaire et l'enregistrer.

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 pour la réponse № 2

Dans forms.py vérifiez que vous disposez d'un formulaire Django comme celui-ci :

class ImageForm(forms.ModelForm):
class Meta:
model = Display
fields = ["image",]

Dans template ajouter {{ form }} au lieu d'utiliser manuellement input, comme celui-ci:

<form method="post" enctype="multipart-formdata>
{% csrf_token %}
{{ form }}
<input type="submit" value="Update Image">