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
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP