TransWikia.com

No se sube la imagen en un formulario django

Stack Overflow en español Asked by Marta on August 1, 2020

Tengo un formulario para subir ubicaciones, si quito el campo imagen del models.py se se me sube si no no! ¿ Sabrían donde podría tener el error?

Mi models. py:

class Ubicacion(models.Model):
  nombre = models.CharField(max_length=200)
  lat  = models.CharField(max_length=50)
  lng = models.CharField(max_length=50)
  imagen = models.ImageField()

  fecha = models.DateTimeField(auto_now_add=True)
  user = models.ForeignKey(User,on_delete=models.PROTECT)
  descripcion = models.CharField(max_length=500)
  TextoParaAudio = models.CharField(max_length=100)
  Ruta = models.ForeignKey(Ruta,on_delete=models.PROTECT)

Mi views:

 ddef upload_file(request):
print("ii")
if request.method == 'POST':
 form = UploadForm(request.POST, request.FILES )
 print("FIle:"+ str(request.FILES))
 if form.is_valid():
    m = Ubicacion.objects.get(pk=id)
    m.model_pic = form.cleaned_data['imagen']
    m.save()
    return HttpResponse('image upload success')
else:
    print("no entro")
return HttpResponseForbidden('allowed only via POST')

Mi index.html

{% extends 'base.html'%}
{% block title%}
Aplicacion en Django y Gmaps
{% endblock %}
{% block container%}

<div id="mapa" class="capas"></div>
<div id="datos" class="capas">

<div id="data">
    <select id="cars" name="cars" size="10">
        {% for ubicacion in ubicaciones %}
            <option value="{{ ubicacion.id }}"> {{ ubicacion.nombre }} {{ ubicacion.user }} - hace {{ ubicacion.fecha | timesince }}</option>
        {% endfor %}
    </select><button type="button" id="deleteUbicacion">Eliminar</button>
</div>
<div id="form" >
    <form method="post" id="form_coords" id="upload_file" enctype="multipart/form-data" >{% csrf_token %}
        {{ form.as_p }}
        <p>
            <input type="submit" id="guardar" value="Guardar Ubicacion">
        </p>
    </form>
</div>

Muchas gracias

4 Answers

he encontrado un ejemplo de código que puede solucionar el problema que tienes con tu view, subir imagenes django

Answered by F Delgado on August 1, 2020

Tienes mal el formulario:

<div id="form" enctype=multipart/form-data>
<form method="post" id="form_coords" action="upload_file" >{% csrf_token %}
    {{ form.as_p }}
    <p>
        <input type="submit" id="guardar" value="Guardar Ubicacion">
    </p>
</form>

El atributo enctype va dentro de la etiqueta form.

Answered by F Delgado on August 1, 2020

He mirado tu código y estoy viendo esto:

if form.is_valid():
    newdoc = Ubicacion(imagen=request.FILES['imagen'])
    newdoc.save(form)

si tienes el objeto form cargado con los datos que le has pasado por el template ylo has validado, ¿porque cargas un objecto Ubicacion y le pasas dichos datos y luego llamas a la funcion save() y le pasas el formulario (otra vez).

Haz directamente form.save().

Answered by F Delgado on August 1, 2020

Te falta enctype=multipart/form-data en tu etiqueta form. Si sigue persistiendo el error comprueba tu setting.py si está bien la configuración de media_url y media_root. Por si acaso, también debes añadirle esto en url.py:

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Answered by F Delgado on August 1, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP