Formularios en Turbogears

Josu Oyanguren josu.oyng en gmail.com
Mar Feb 14 13:01:48 CET 2006


Hola,

no sé si me queda claro cuál es tu problema. Necesitaría ver algo de código.

De todas formas, respecto al tema de mostrar los objetos de SQLObject en los
formularios, yo considero que hay dos problemas separados: mostrarlos
(objeto -> formulario) y recuperarlos (formulario -> objeto).

A la hora de mostrarlos, tu solución es perfectamente válida. El problema
que le veo es que cuando tienes datos en los objetos que no sean texto,
tienes que pensar cómo se van a enseñar en el formulario, y si haces esto en
la plantilla se empieza a "enguarrar". A mí me gusta más tener una función
en el controlador que convierte los objetos en diccionarios cuyas claves y
elementos sean cadenas de texto, es decir algo que me transforme el objeto
o, donde

o.nombre = 'nombre'
o.apellidos = 'apellidos'
o.fecha_nacimiento = datetime.date(1980,3,4)
o.nacido_en = Poblacion.byCodigo('48020') # Esto es una clave externa a un
objeto tipo poblacion

a algo así

{'nombre': 'nombre', 'apellidos': 'apellidos', 'fecha_nacimiento':
'04/03/1980', 'nacido_en': '48020', 'nacido_en_nombre': 'Bilbao'}

y mandar esto a la plantilla.

A la hora de recuperar los valores de formulario, hay que tener en cuenta
que todo lo que nos llega son cadenas de texto, y que debemos transformarlas
a los tipos de datos que requiere el objeto en la base de datos. Turbogears
propone hacer esto con el módulo validators (en
http://www.turbogears.com/docs/gettingstarted.html lo comentan). Es buena
solución, aunque a veces pienso que se queda un poco corta, y que cuando hay
que hacer transformaciones que no sean directas el asunto se complica
bastante. Personalmente, quizá por eso de mantener la simetría, yo suelo
poner en los controladores una función inversa a la anterior, que toma los
datos como cadenas, y los transforma en un objeto tipo SQLObject,
comprobando los errores en el formulario y actuando en consecuencia si los
hubiera.

Espero que esto te dé alguna pista para seguir avanzando. Turbogears me
parece un entorno fantástico.

Josu.




Más información sobre la lista de distribución Python-es