recuperar en el server un input type file

103 views
Skip to first unread message

Jessica González

unread,
May 11, 2014, 5:45:05 PM5/11/14
to djan...@googlegroups.com
buenas, como puedo recuperar mi archivo en el servidor? 

ahora mismo tengo en el view un metodo definido de la sgt manera:



def crear_item(request):
    respuesta= Response.Response()
    v_atributos=[]
    nuevo_item= None
    v_nombre = request.POST['nombre']
    v_descripcion = request.POST['descripcion']
    v_idtipoitem = request.POST['tipoitem']
    v_idfase= request.POST['fase']
    v_fase= Fase.objects.get(id=v_idfase)     
    v_costo_str = request.POST['costo']
    v_complejidad_str = request.POST['complejidad'] 
    
    try:
        v_tipoitem= TipoItem.objects.get(id=v_idtipoitem)    
        v_atributos= Atributo.objects.filter(id_tipoitem=v_tipoitem) 
    except:
        respuesta.mensaje='Debe seleccionar un Tipo Item'       
  
    try:
        v_costo= int(v_costo_str)
    except:
        respuesta.mensaje='Costo debe ser entero numerico'
    
    try:
        v_complejidad= int(v_complejidad_str)
    except:
        respuesta.mensaje='Complejidad debe ser entero numerico' 
     
    nro=1
    items= Item.objects.all()
    for item in items:
        if item.numero >= nro:
            nro=nro+1
    try:
        nuevo_item= Item(version=1, estado='Definicion',complejidad=v_complejidad, costo= v_costo, descripcion= v_descripcion, id_fase= v_fase, id_tipo_item= v_tipoitem,numero= nro, activo= 'TRUE', nombre= v_nombre)
        nuevo_item.save()
    except:
        respuesta.codigo=-1
        return HttpResponse(json.dumps(respuesta.to_dic()), content_type="application/json")        
    
    #si el item guardo bien procedo a guardar el valor de sus atributos
    try:
        for atributo in v_atributos:
            print atributo
            print atributo.tipo           
             
            if atributo.tipo == 'file':
                valor=request.FILES[str(atributo.id)]
                print 'file' 
                data=valor.read()
                print data
                print valor.name()
                print valor.path()       
                                        
                
            v_valor= request.POST[str(atributo.id)]
            print v_valor
                        
            
            atributo_item=AtributoItem(id_atributo=atributo, id_item=nuevo_item, valor= v_valor)
            atributo_item.save()
    
        return HttpResponse(json.dumps(respuesta.to_dic()), content_type="application/json")
    except:
        respuesta.codigo=-1
        respuesta.mensaje='No se pudo guardar el item, problema con los atributos'
        nuevo_item.delete()
        return HttpResponse(json.dumps(respuesta.to_dic()), content_type="application/json")
        




Al recuperar los atributos es mi problema, mi form es el sgt:


<form id="form-crear-item" role="formasd" action="/crearItem/"
enctype="multipart/form-data" method="post" onsubmit="return false;">
{% csrf_token %} 
<div class="modal-body">

<div class="input-group">
Nombre: <input type="text" name="nombre" id="nombre"
class="form-control" placeholder="Item" required autofocus>
</div><br>
<div class="input-group">
Costo: <input type="text" name="costo" id="costo"
class="form-control" placeholder="Costo" required autofocus>
</div><br>
<div class="input-group">
Complejidad: <input type="text" name="complejidad" id="complejidad"
class="form-control" placeholder="Complejidad" required autofocus>
</div><br>
<div class="input-group">
Descripcion: <input type="text" name="descripcion" id="descripcion"
class="form-control" placeholder="Descripcion" required autofocus>
</div><br>
<select id="tipoitem" name="tipoitem" onchange="onChangeTI(this)"></select>
        <div id="atributos" style="display: none"></div>
       
        <input type="hidden" name="fase" value="{{fase.id}}">
</div>
<div class="bg-danger" id="div-mensaje" style="display: none; margin-left: 10px; 
padding-left: 10px"><label id="label-mensaje"></label></div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal"
aria-hidden="true" onclick="window.location.reload();">Cerrar</button>
<button type="submit" class="btn btn-primary" id="guardar">Guardar</button>
</div>
</form>





y el container de atributos lo cargo en una funcion, específicamente si es archivo lo hago así:

 } else if (object.fields.tipo === "file") {
                         //es un archivo externo
                         
                         parametros += '<b><spam style="margin-left: 15%"></span>' + object.fields.nombre + ':</b><input name="' + object.pk + '" type="file" size="40"/> <br>';
             
                          }


alguien tiene alguna idea? o puede ayudarme?

--

Jessica Gonzalez Martínez.

Hiko hitokiri

unread,
May 11, 2014, 7:27:31 PM5/11/14
to djan...@googlegroups.com
mira la primera cosa es que no entiendo para que lo estas haciendo con Js . pero bueno la cosa es que no veo el js donde estas enviando el objeto formulario . te dejo un ejemplo de como lo puede hacer

http://stackoverflow.com/questions/16540723/django-ajax-file-upload

Jessica González

unread,
May 12, 2014, 11:33:58 AM5/12/14
to djan...@googlegroups.com

Primero que nada mil gracias por responder.

Te explico.

Porque los atributos varian de acuerdo a un tipo de item a crear elegido, es decir, tiene de opciones por ejemplo: Tipo1 y Tipo2
el tipo1 con atributos string y boolean  y
tipo2 con atributo file.. entonces .. en el momento de la creacion al elegir el tipo que quiere crear llama a la funcion y me trae para poner un string y un boolean si eligio Tipo1, pero si eligio un tipo2 me debe traer para elegir el archivo, por eso utilizo JS.

No se si me explique...

ahora, ya logre obtener mi archivo en el servidor, lo que no puedo es obtener la ruta para guardar su path... o guardar el propio archivo..... al obtener solo consigo el nombre con su exrension..... lei que se tenia que hacer un

archivo.path()

pero me dice que archivo no tiene el atributo path :(

Saludos :)

El 11/05/2014 19:28, "Hiko hitokiri" <las...@gmail.com> escribió:
mira la primera cosa es que no entiendo para que lo estas haciendo con Js . pero bueno la cosa es que no veo el js donde estas enviando el objeto formulario . te dejo un ejemplo de como lo puede hacer

http://stackoverflow.com/questions/16540723/django-ajax-file-upload

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Hiko hitokiri

unread,
May 12, 2014, 2:43:02 PM5/12/14
to djan...@googlegroups.com
si lo que pasa es que eso tendrias que hacerlo con el puro java scrip capturando la direccion desde  el input en el navegador . osea en local por que cuando se van a subir los datos siempre se ponene las cosas en temp para subirlas a el server entonces si lo haces despues te daria la /tmp/ y el nombre de el archivo . ya que como ese dato no es requerido para otra cosa se pierde antes . asi que tocaría recuperarlo de el navegador
Reply all
Reply to author
Forward
0 new messages