Por algum motivo no django a forma que soutentar usar não é considerado válido. Este código é obtido quase diretamente de um site que afirma que funciona, mas ainda não é funcional. meu código é o seguinte.
VISUALIZAÇÕES
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 (o nome do modelo é 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" />
MODELOS
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
editar: esqueça de postar o código do Formulários, desculpe
class ImageForm(forms.Form):
image = forms.ImageField()
edição posterior: alterando minha classe de formulários para este
class ImageForm(forms.Form):
class Meta:
model = Display
fields = ("image",)
Permite que o formulário seja lido como válido por algum motivo, embora eu não entenda o porquê. Infelizmente, isso faz com que meu método de visualizações não funcione corretamente, pois não consegue mais ler
display.image = form.cleaned_data["image"]
Respostas:
2 para resposta № 1Se você form class is a modelform: class ImageForm(forms.ModelForm):
você pode passar a instância para o formulário e salvá-la.
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 para resposta № 2
Dentro forms.py
verifique se você tem um formulário Django como este:
class ImageForm(forms.ModelForm):
class Meta:
model = Display
fields = ["image",]
Dentro template
adicionar {{ form }}
em vez de usar manualmente input
, como este:
<form method="post" enctype="multipart-formdata>
{% csrf_token %}
{{ form }}
<input type="submit" value="Update Image">