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.