hacer lo que hace el django con los formularios????

267 views
Skip to first unread message

ariel.glez.m

unread,
Nov 5, 2010, 11:06:40 AM11/5/10
to web2py-usuarios
Hola...
me pidieron que imitara lo que hace el django con los formularios, el
django al lado de los formularios pone un + al cual cuando tu le das
click se te levanta una ventanita en la cual insertas los datos y
automaticamente se actualiza el combo box que esta al lado del +, la
parte de levantar la ventanita la logre usando un funcion jquery popup
que se encuentra en web2py_ajax.html, en la cual tengo un formulario
normal, en el cual inserto usando crud en la base de datos pero para
que el combo box se actualize tengo que refrescar la
pagina.....alguien sabe como podria hacer eso mismo sin refrescar la
pagina, si alguien me pudiera ayudar al respecto mis conocimientos
usando ajax son nulos.


listausuario = [ ]
for row in db(db.usuariotabla.id>0).select():
listausuario.append(row.nombre)

<table>
<tr>
<td> {{=LABEL('Usuario:')}} </td>
<td> {{=SELECT([OPTION(texto, _value=texto) for texto in
listausuario],_name='usuario') }} </td>
<td>{{=A('añadir',_class='link5',_id='link5',_href="#",_style='font-
weight:bold')}}</td>
</tr>
</table>
</form>

<script>
jQuery('.link5').click(function()
{popup("{{=URL(r=request,c='admin' ,f='index')}}")});
</script>

controller:admin
def index():
myform = crud.create(db.usuariotabla,message=T("Usuario
Insertado"))
return dict(form=myform)

Mariano Reingart

unread,
Nov 5, 2010, 11:11:35 AM11/5/10
to web2py-...@googlegroups.com
Fijate si esto te sirve:

http://web2py.com/plugins/default/dropdown

Es un plugin que tiene un link New, abre una ventana para agregar un
item a la lista.

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com


2010/11/5 ariel.glez.m <ariel....@gmail.com>:

Ariel González Martín

unread,
Nov 5, 2010, 11:59:18 AM11/5/10
to web2py-...@googlegroups.com
Gracias Mariano
Es parecido a lo que tengo hecho, cuando cierras la ventana emergente
si no das F5, el combobox no te pone los nuevos elementos agregados es
lo mismo que me sucede a mi, eso debe ser con ajax y debe estar medio
complicado...slds Ariel

El día 5 de noviembre de 2010 10:11, Mariano Reingart
<rein...@gmail.com> escribió:

Alan Etkin

unread,
Nov 6, 2010, 11:36:04 AM11/6/10
to web2py-usuarios
El model:

db.define_table('usuariotabla', Field('nombre'))


Functions en el controller para manejar rpc en con html (no usa
"call"):

def listausuarios():
listado = "<select>"
for usuario in db(db.usuariotabla).select():
listado += "<option>" + usuario.nombre + "</option>"

listado += "</select>"
return listado

def nuevousuario():
db.usuariotabla.insert(nombre = request.args[0])
return "se agregó el usuario: " + request.args[0]


Esto va del lado del view:

<script type='text/javascript'>
$(document).ready(function(){
cargarLista();
var elusuario = null;
function cargarLista(){
$('#lista').load('listausuarios');
}
function nuevoUsuario(){
elusuario = $('#texto_agregar').val();
$('#mensaje').load('nuevousuario/' + elusuario, null,
usuarioCallback);
}
function usuarioCallback(){
cargarLista();
elusuario = $('#texto_agregar').val('');
}
$('#agregar').click(function(){
nuevoUsuario();
});
})
</script>

<table>
<tr>
<td> {{=LABEL('Usuario:')}} </td>
<td id='lista'></td><td><input name='Agregar' value='Agregar'
type="button" id='agregar' /></td><td><input type="text"
id='texto_agregar' /></td>
</tr>
</table>
<div id='mensaje' height='1em'>
</div>


Con este código pude actualizar la base de datos y el listado. ¿Se
puede implementar algo parecido en un plugin?

On 5 nov, 12:59, Ariel González Martín <ariel.gle...@gmail.com> wrote:
> Gracias Mariano
> Es parecido a lo que tengo hecho,  cuando cierras la ventana emergente
> si no das F5, el combobox no te pone los nuevos elementos agregados es
> lo mismo que me sucede a mi, eso debe ser con ajax y debe estar medio
> complicado...slds Ariel
>
> El día 5 de noviembre de 2010 10:11, Mariano Reingart
> <reing...@gmail.com> escribió:
>
> > Fijate si esto te sirve:
>
> >http://web2py.com/plugins/default/dropdown
>
> > Es un plugin que tiene un link New, abre una ventana para agregar un
> > item a la lista.
>
> > Sds
>
> > Mariano Reingart
> >http://www.sistemasagiles.com.ar
> >http://reingart.blogspot.com
>
> > 2010/11/5 ariel.glez.m <ariel.gle...@gmail.com>:

Alan Etkin

unread,
Nov 6, 2010, 11:36:16 AM11/6/10
to web2py-usuarios
<table>
<tr>
<td> {{=LABEL('Usuario:')}} </td>
<td id='lista'></td><td><input name='Agregar' value='Agregar'
type="button" id='agregar' /></td><td><input type="text"
id='texto_agregar' /></td>
</tr>
</table>
<div id='mensaje' height='1em'>
</div>


Con este código pude actualizar la base de datos y el listado. ¿Se
puede implementar algo parecido en un plugin?

On 5 nov, 12:59, Ariel González Martín <ariel.gle...@gmail.com> wrote:
> Gracias Mariano
> Es parecido a lo que tengo hecho,  cuando cierras la ventana emergente
> si no das F5, el combobox no te pone los nuevos elementos agregados es
> lo mismo que me sucede a mi, eso debe ser con ajax y debe estar medio
> complicado...slds Ariel
>
> El día 5 de noviembre de 2010 10:11, Mariano Reingart
> <reing...@gmail.com> escribió:
>
> > Fijate si esto te sirve:
>
> >http://web2py.com/plugins/default/dropdown
>
> > Es un plugin que tiene un link New, abre una ventana para agregar un
> > item a la lista.
>
> > Sds
>
> > Mariano Reingart
> >http://www.sistemasagiles.com.ar
> >http://reingart.blogspot.com
>
> > 2010/11/5 ariel.glez.m <ariel.gle...@gmail.com>:

Mariano Reingart

unread,
Nov 6, 2010, 3:08:41 PM11/6/10
to web2py-...@googlegroups.com
Quizás se podría armar un widget ("control") para poder establecerlo
directamente del modelo, vean este recorte con varios widgets
(autocompletar, deslizadores, selección en cascada, selección
múltiple, etc.):

http://web2pyslices.com/main/slices/take_slice/86

Sds

2010/11/6 Alan Etkin <spam...@gmail.com>:

Ariel González Martín

unread,
Nov 8, 2010, 11:48:31 AM11/8/10
to web2py-...@googlegroups.com
Gracias mariano y Alan

Alan esta muy bueno eso que hciste tengo que aprender a hacer ese tipo
de cosas usaste jquery puro o lo ligaste con ajax????...yo realmente
no se mucho de esos temas

No estoy seguro pero me parece que la vaiable

request.args[0]

No acepta palabras compuestas por ejemplo Ariel Gonzalez no lo acepta
tiene que ser Ariel_Gonzalez para que lo entienda...todo unido

def nuevousuario():
db.usuariotabla.insert(nombre = request.args[0])
return "se agregó el usuario: " + request.args[0]


El 06/11/10, Mariano Reingart <rein...@gmail.com> escribió:

Alan Etkin

unread,
Nov 9, 2010, 8:41:52 AM11/9/10
to web2py-usuarios
Utilicé la función load de jQuery, que te permite hacer consultas sin
refrescar el navegador. En la página de jQuery tenés las
instrucciones:
http://api.jquery.com/load/

Para pasar palabras compuestas creo que hay que convertir a
"urlencoded" o enviarlo como un form de html en la solicitud.

On 8 nov, 13:48, Ariel González Martín <ariel.gle...@gmail.com> wrote:
> Gracias mariano y Alan
>
> Alan esta muy bueno eso que hciste tengo que aprender a hacer ese tipo
> de cosas usaste jquery puro o lo ligaste con ajax????...yo realmente
> no se mucho de esos temas
>
> No estoy seguro pero me parece que la vaiable
>
> request.args[0]
>
> No acepta palabras compuestas por ejemplo Ariel Gonzalez no lo acepta
> tiene que ser Ariel_Gonzalez para que lo entienda...todo unido
>
> def nuevousuario():
>    db.usuariotabla.insert(nombre = request.args[0])
>    return "se agregó el usuario: " + request.args[0]
>
> El 06/11/10, Mariano Reingart <reing...@gmail.com> escribió:
>
> > Quizás se podría armar un widget ("control") para poder establecerlo
> > directamente del modelo, vean este recorte con varios widgets
> > (autocompletar, deslizadores, selección en cascada, selección
> > múltiple, etc.):
>
> >http://web2pyslices.com/main/slices/take_slice/86
>
> > Sds
>
> > Mariano Reingart
> >http://www.sistemasagiles.com.ar
> >http://reingart.blogspot.com
>
> > 2010/11/6 Alan Etkin <spame...@gmail.com>:

IvanaEmi

unread,
Sep 20, 2012, 7:23:12 PM9/20/12
to web2py-...@googlegroups.com
Mariano hola Ya que recomendaste estas paginas..yo use los widgets para hacer un select en cascada.. MI gran problema es mi formulario porq el mio esta hecho manualmente!...
Entonces nose como hacer ese campo en especifico que llama a la clase del widget!!

def registrar_alumnos():
       
   
    cascade = CascadingSelect(db.state,db.city,db.zipcode)
    db.alumnos.location.widget = cascade.widget

   form = FORM(TABLE(TR(H4('DATOS DE INSCRIPCIÓN')),
         
        TD('Nombre:' , INPUT(_type='text',_name='nombre', _id='nombre',requires=IS_NOT_EMPTY(error_message=T('Ingrese el Nombre')))),
        TR(TD(LABEL('Ubicación:')db.alumnos.location.widget = cascade.widget)), 
        TR("",INPUT(_type="submit",_value="Registrar Nuevo ALumno"))),
        )

Espero me ayuden con esto!! porque es una lastima que no pueda implementar los widgets q estan buenisimos en determinados campos!!.. Porq mi formulario es de ese modo por una cuestion nose si grafica pero aprendi a hacerlos asi.. Helpp!! GRACIIIIAS!!

Alan Etkin

unread,
Sep 21, 2012, 8:54:24 AM9/21/12
to web2py-usuarios
On Sep 20, 8:23 pm, IvanaEmi <ivana.cama...@uccuyosl.edu.ar> wrote:
> Mariano hola Ya que recomendaste estas paginas..yo use los widgets para
> hacer un select en cascada.. MI gran problema es mi formulario porq el mio
> esta hecho manualmente!...
> Entonces nose como hacer ese campo en especifico que llama a la clase del
> widget!!

Me parece que tenés que utilizar SQLFORM.factory para poder asignarle
el widget a una definición de campo. Con el ayudante FORM creo que no
funciona.
Reply all
Reply to author
Forward
0 new messages