Upload de imagem simples do Django para model imagefield

Este é um snippet simples para fazer o upload de uma imagem para o seu modelo no Django.
Supondo que você precise apenas do campo de imagem, criar um formulário de modelo é fútil, então, em vez disso, faço uma classe de formulário mais simples:

class ImageUploadForm(forms.Form):
"""Image upload form."""
image
= forms.ImageField()

e meu exemplo de modelo:

class ExampleModel(models.Model):
model_pic
= models.ImageField(upload_to = 'pic_folder/', default = 'pic_folder/None/no-img.jpg')

Diante disso, o formulário html dentro do modelo deve ser algo assim:

<form action="{% url upload_pic %}" method="post" enctype="multipart/form-data">{% csrf_token %}
<p>
<input id="id_image" type="file" class="" name="image">
</p>
<input type="submit" value="Submit" />
</form>

O que é importante notar aqui é que o formulário tem “enctype” de enctype = “multipart / form-data” que é necessário para o upload do arquivo.

A visão pode ser assim: (minha visão não serve a nenhum modelo, já que minha implementação é via Ajax, sobre isso em meu próximo post

def upload_pic(request):
if request.method == 'POST':
form
= ImageUploadForm(request.POST, request.FILES)
if form.is_valid():
m
= ExampleModel.objects.get(pk=course_id)
m
.model_pic = form.cleaned_data['image']
m
.save()
return HttpResponse('image upload success')
return HttpResponseForbidden('allowed only via POST')

aqui, novamente, uma das armadilhas comuns é esquecer o “request.FILES” que deve ser fornecido ao inicializador de classe de formulário ao lidar com arquivos.

diverta-se.