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